Socket编程入门

实验目的:学会socket编程


要求:

1、实现语言不限(可以用C、Java、C#、Python等等,自由发挥)

2、实现两个程序:服务器端、客户端

2.1、服务器端程序,监听在8888端口,当客户端程序发出请求字符串:getdatetime时,返回当前服务器端机器的时间,格式为:yyyy-MM-dd HH:mm:ss

2.2、客户端程序,连接到服务器端程序,发出字符串:getdatetime,当接收到服务器端响应后,把返回的日期时间字符串显示在黑窗口中,退出

09e61203a7ab475db3006dc870bab941.jpeg

 

 要实现一个简单的客户端-服务器端交互程序,使用Socket建立TCP连接,通过在服务器端监听8888端口,并接收客户端发来的请求字符串“getdatetime”来获取系统当前时间,并且返回给客户端,客户端程序连接到服务器端,发送完请求字符串后,接收来自服务器端返回的当前时间字符串并且在控制台打印出来。

服务器端

1、首先,我们先创建ServerSocket对象,并且指定服务器端口号为8888

ServerSocket serverSocket = null;

try {
    serverSocket = new ServerSocket(8888);
} catch (IOException e) {
    System.err.println("Could not listen on port: 8888.");
    System.exit(1);
}

2、创建完Socket对象后,我们等待客户端连接。如果客户端连接成功,则创建输入输出流。

Socket clientSocket = null;
PrintWriter out = null;
BufferedReader in = null;

try {
    clientSocket = serverSocket.accept();
    out = new PrintWriter(clientSocket.getOutputStream(), true);
    in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
} catch (IOException e) {
    System.err.println("Accept failed.");
    System.exit(1);
}

3、读取客户端发来的请求字符串,如果请求字符串为‘getdatetime’,则获取当前时间并且通过输出流返回客户端

String inputLine;
while ((inputLine = in.readLine()) != null) {
    if (inputLine.equals("getdatetime")) {
        out.println(java.time.LocalDateTime.now());
    }
}

4、最后要记得关闭输入输出流和Socket连接

out.close();
in.close();
clientSocket.close();
serverSocket.close();

 

客户端程序

1、创建Socket对象,指定服务器的IP地址和端口号

Socket clientSocket = null;

try {
    clientSocket = new Socket("localhost", 8888);
} catch (UnknownHostException e) {
    System.err.println("Don't know about host: localhost.");
    System.exit(1);
} catch (IOException e) {
    System.err.println("Couldn't get I/O for the connection to: localhost.");
    System.exit(1);
}

2、创建输入输出流

PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

3、发送请求字符串到服务器端

out.println("getdatetime");

4、读取从服务器端返回的当前的时间字符串并且打印到控制台上

String userInput;

while ((userInput = in.readLine()) != null) {
    System.out.println(userInput);
    break;
}

5、关闭输入输出流和Socket连接

out.close();
in.close();
clientSocket.close();

 

注意:

在运行时需要先启动服务器端程序,然后再启动客户端程序。当服务器端程序结束时,这个时候打开客户端会出现Couldn't get I/O for the connection to: localhost.

因为在同一个电脑上运行,是典型的P-P。要在eclipse中同时运行两个程序。

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值