Socket实现简单的客户端服务端通信

用Socket实现简单客户端和服务端通信。

正文:

  服务端的编写:

 1 public class ServerDemo {
 2 
 3     public static void main(String[] args) {
 4         
 5         try {
 6             //创建ServerSocket,并指定端口
 7             ServerSocket serverSocket=new ServerSocket(8888);
 8             System.out.println("服务器即将启动,并等待连接");
 9             //调用accept()方法,监听并接受到服务端的连接。当连接时,返回获得的Socket实例
10             Socket socket=serverSocket.accept();
11             
12             
13             
14             //通过获得的Socket得到字节输入流InputStream,用来读取客户端发送的信息
15             InputStream inputStream=socket.getInputStream();
16             //将字节流转换为字符流
17             InputStreamReader inputStreamReader=new InputStreamReader(inputStream);
18             //添加缓存
19             BufferedReader bufferedReader=new BufferedReader(inputStreamReader);
20             String info=null;
21             //读取信息
22             while((info=bufferedReader.readLine())!=null){
23                 System.out.println(info);
24             }
25             //调用shutdownInput关闭输入流
26             socket.shutdownInput();
27             
28             System.out.println("服务端已接收到请求,开始响应信息");
29             
30             //获取输出流
31             OutputStream outputStream=socket.getOutputStream();
32             //转换为打印流
33             PrintWriter printWriter=new PrintWriter(outputStream);
34             printWriter.write("客户端你好,欢迎使用");
35             printWriter.flush();
36             //关闭输出流
37             socket.shutdownOutput();
38             
39             //关闭资源
40             printWriter.close();
41             bufferedReader.close();
42             inputStreamReader.close();
43             
44             //关闭输入输出流
45             outputStream.close();
46             inputStream.close();
47             
48             //关闭Socket
49             socket.close();
50             /*//关闭ServerSocket
51             serverSocket.close();*/
52             
53         } catch (IOException e) {
54             // TODO Auto-generated catch block
55             e.printStackTrace();
56         }
57         
58     }
59 
60 }

  客户端的编写:

 1 public class ClientDemo {
 2 
 3     public static void main(String[] args) {
 4         
 5         try{
 6             //创建Socket,并指定服务器地址和端口号
 7             Socket socket=new Socket("127.0.0.1",8888);
 8             
 9             //通过Socket获取输出流
10             OutputStream outputStream=socket.getOutputStream();
11             //将输出流转换为为打印流
12             PrintWriter printWriter=new PrintWriter(outputStream);
13             //向服务端发送信息
14             printWriter.write("你好,服务端");
15             printWriter.write("如果接受到请求,请回应");
16             printWriter.flush();
17             
18             //关闭输出流
19             socket.shutdownOutput();
20             
21             System.out.println("已获取服务器响应,回复如下:");
22             
23             //获取输入流
24             InputStream inputStream=socket.getInputStream();
25             //转换为字符流
26             InputStreamReader inputStreamReader=new InputStreamReader(inputStream);
27             //添加缓存
28             BufferedReader bufferedReader=new BufferedReader(inputStreamReader);
29             String info=null;
30             while((info=bufferedReader.readLine())!=null){
31                 System.out.println(info);
32             }
33             //关闭输入流
34             socket.shutdownInput();
35             
36             //关闭资源
37             bufferedReader.close();
38             inputStreamReader.close();
39             printWriter.close();
40             
41             //关闭输入输出流
42             inputStream.close();
43             outputStream.close();
44             
45             //关闭Socket
46             socket.close();
47         }catch(Exception e){
48             e.printStackTrace();
49         }
50     }
51 
52 }

   至此,服务端和客户端的通信已简单实现。

注意点:

  1. 在进行连接时,不可以提前关闭输入输出流,包括字节流转换的各种流,一定要在连接结束时统一关闭。如果在连接的中途关闭了流,会造成Socket的关闭,连接中断。
  2. shutdownInput()shutdownOutput()是一种单向关闭流,即关闭客户端并不会影响服务端。
  3. 在调用shutdownInput()和shutdownOutput()时,虽然其关闭了对应的输入或输出流,并且不会关闭网络连接。但是当在同一个连接中不能再获得对应的输入输出流,
posted @ 2017-04-17 22:23  明夷  阅读(236)  评论(0编辑  收藏  举报