关于Java网络编程问题

关于Java网络编程问题

Server端

import java.net.*;

import java.io.*;

public class TestServer extends Thread{

private ServerSocket serverSocket;

public TestServer(int port) throws IOException {

serverSocket = new ServerSocket(port);

serverSocket.setSoTimeout(10000);

}

public void run()

  {

     while(true)

     {

        try

        {

           System.out.println("等待远程连接,端口号为:" + serverSocket.getLocalPort() + "...");

           Socket server = serverSocket.accept();

           System.out.println("远程主机地址:" + server.getRemoteSocketAddress());

           DataInputStream in = new DataInputStream(server.getInputStream());

           System.out.println(in.readUTF());

           DataOutputStream out = new DataOutputStream(server.getOutputStream());

           out.writeUTF("谢谢连接我:" + server.getLocalSocketAddress() + "\nGoodbye!");

           server.close();

        }catch(SocketTimeoutException s)

        {

           System.out.println("Socket timed out!");

           break;

        }catch(IOException e)

        {

           e.printStackTrace();

           break;

        }

     }

  }


public static void main(String[] args) {

int port = Integer.parseInt("6066"); 

try {

Thread thread = new TestServer(port);      //class继承了Thread类

thread.run();

} catch (IOException e) {

e.printStackTrace();

        }

    }

}

Client端

import java.net.*;

import java.io.*;


public class TestClient {


public static void main(String[] args) {

String serverName = "localhost";

     int port = Integer.parseInt("6066");

     try

     {

        System.out.println("连接到主机:" + serverName + " ,端口号:" + port);

        Socket client = new Socket(serverName, port);

        System.out.println("远程主机地址:" + client.getRemoteSocketAddress());

        OutputStream outToServer = client.getOutputStream();

        DataOutputStream out = new DataOutputStream(outToServer);

 

        out.writeUTF("Hello from " + client.getLocalSocketAddress());

        InputStream inFromServer = client.getInputStream();

        DataInputStream in = new DataInputStream(inFromServer);

        System.out.println("服务器响应: " + in.readUTF());

        client.close();

     }catch(IOException e)

     {

        e.printStackTrace();

     }

}

}

http://img1.sycdn.imooc.com//climg/5c12001b0001bcc803520083.jpg

正在回答

登陆购买课程后可参与讨论,去登陆

4回答

测试你的代码没问题呀。

http://img1.sycdn.imooc.com//climg/5c122da70001d4db04730130.jpg

  • 慕数据0284452 提问者 #1
    。。。这就很奇怪了,我的总是超时
    2018-12-14 14:43:26
提问者 慕数据0284452 2018-12-15 14:34:08

最后发现是因为,服务端程序运行速度太快,两边都来不及反应,进行断电或者阻塞就好了

提问者 慕数据0284452 2018-12-14 21:26:51

这么运行的话,我还是不行,而且远程主机端口怎么随机变的?http://img1.sycdn.imooc.com//climg/5c13af850001f86f04660187.jpg

提问者 慕数据0284452 2018-12-14 15:07:50

我想问下,您是先启动的Client端的程序吗,我的会报错http://img1.sycdn.imooc.com//climg/5c13560100013d6d07910073.jpg

然后我还是不太懂先启动一方之后为什么另一方会有响应,他们之间是怎么越过程序建立联系的?虽然端口号相同,但是另一方的程序并没有被编译呀

  • 当然是先运行Server端的程序了,然后再运行Client端的去访问Server端了,给你举个例子,比如你手机上的微信是客户端,然后你发消息给你的朋友,传递过程是这样的,客户端-服务器-客户端。
    2018-12-14 17:08:45
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师