需求:客户端连接服务器,连接成功后给服务发送“Hello,服务器!”,服务器收到消息后,给客户端返回“欢迎登录”。

  服务器端程序示例代码:

 1 import java.io.InputStream;
 2 import java.io.OutputStream;
 3 import java.net.ServerSocket;
 4 import java.net.Socket;
 5 
 6 public class Server {
 7 
 8     public static void main(String[] args)throws Exception {
 9         //1、准备一个ServerSocket对象,并绑定8888端口
10         ServerSocket server =  new ServerSocket(8888);
11         System.out.println("等待连接....");
12         
13       //2、在8888端口监听客户端的连接,该方法是个阻塞的方法,如果没有客户端连接,将一直等待
14         Socket socket = server.accept();
15         System.out.println("一个客户端连接成功!!");
16         
17         //3、获取输入流,用来接收该客户端发送给服务器的数据
18         InputStream input = socket.getInputStream();
19         //接收数据
20         byte[] data = new byte[1024];
21         StringBuilder s = new StringBuilder();
22         int len;
23         while ((len = input.read(data)) != -1) {
24             s.append(new String(data, 0, len));
25         }
26         System.out.println("客户端发送的消息是:" + s);
27                 
28         //4、获取输出流,用来发送数据给该客户端
29         OutputStream out = socket.getOutputStream();
30         //发送数据
31         out.write("欢迎登录".getBytes());
32         out.flush();
33         
34         //5、关闭socket,不再与该客户端通信
35         //socket关闭,意味着InputStream和OutputStream也关闭了
36         socket.close();
37         
38         //6、如果不再接收任何客户端通信,可以关闭ServerSocket
39         server.close();
40     }
41 }

 

  客户端程序示例代码:

 1 import java.io.InputStream;
 2 import java.io.OutputStream;
 3 import java.net.Socket;
 4 
 5 public class Client {
 6 
 7     public static void main(String[] args) throws Exception {
 8         // 1、准备Socket,连接服务器,需要指定服务器的IP地址和端口号
 9         Socket socket = new Socket("127.0.0.1", 8888);
10 
11         // 2、获取输出流,用来发送数据给服务器
12         OutputStream out = socket.getOutputStream();
13         // 发送数据
14         out.write("Hello,服务器!".getBytes());
15         //会在流末尾写入一个“流的末尾”标记,对方才能读到-1,否则对方的读取方法会一致阻塞
16         socket.shutdownOutput();
17         
18         //3、获取输入流,用来接收服务器发送给该客户端的数据
19         InputStream input = socket.getInputStream();
20         // 接收数据
21         byte[] data = new byte[1024];
22         StringBuilder s = new StringBuilder();
23         int len;
24         while ((len = input.read(data)) != -1) {
25             s.append(new String(data, 0, len));
26         }
27         System.out.println("服务器返回的消息是:" + s);
28         
29         //4、关闭socket,不再与服务器通信,即断开与服务器的连接
30         //socket关闭,意味着InputStream和OutputStream也关闭了
31         socket.close();
32     }
33 }

 

   注意:运行程序时,必须先启动服务器程序,主动接受客户端程序的连接请求。

 

posted on 2021-06-13 11:02  格物致知_Tony  阅读(112)  评论(0编辑  收藏  举报