Socket

1.

 1 ServerSocket ss = new ServerSocket(port); 
 2   while(true){ //如果有客户端的连接请求,将执行下面的操作 
 3   Socket client = ss.accept(); //新建客户端对象 
 4   Handle handle = new Handle(client);//启动个客户端线程,并且一直监听,直到退出,若有多个客户端请求,则会新建多个客户端线程,由此实现多线程 
 5   } 
 6 
 7 
 8 public class Handle implements Runnable{ 
 9 Socket socket; 
10 public Handle(Socket socket){ 
11 this.socket = socket; 
12 new Thread(this).start();   
13 } 
14 public void run(){ 
15 try{ 
16   BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); 
17             writer.write("返回服务器处理的消息给客户端"); 
18             writer.flush(); 
19             writer.close();//关闭这个socket 
20 
21          } catch (Exception e){ 
22 } 
23 }

2

为了方便用户使用Socket进行通信,Java把Socket封装成了类。如果查看Socket类的源码,代码是比较长的。我们这里创建了一个Socket_来表示下它。

 1 public class Socket_ {
 2 
 3     public Socket_() {
 4     }
 5 
 6     public Socket_(Proxy proxy) {
 7     }
 8 
 9     public Socket_(SocketImpl impl) {
10     }
11 
12     public Socket_(String host, int port) {
13     }
14 
15     public Socket_(InetAddress addr, int port) {
16     }
17 
18     public Socket_(String host, int port, InetAddress localAddr, int localPort) {
19     }
20 
21     public Socket_(InetAddress addr, int port, InetAddress localAddr,
22             int localPort) {
23     }
24 
25     public InputStream getInputStream() {
26         return null;
27     }
28 
29     public OutputStream getOutputStream() {
30         return null;
31     }
32 
33 }

 这样我们可以对Socket类有了大致的了解,对于一般用户只要知道这个套接字能够连接到另一台计算机,并能够获取数据输入输出流着就足够了。

 1 import java.io.IOException;
 2 import java.io.InputStream;
 3 import java.net.Socket;
 4 import java.net.UnknownHostException;
 5 
 6 public class TestSocket {
 7 
 8     public static final int BUF_SIZE = 1024;
 9 
10     public static void main(String[] args) {
11         try {
12             Socket socket = new Socket("localhost", 5000);
13             InputStream input = socket.getInputStream();
14 
15             // 好了,接下来就是InputStream对象的事了
16             // 就像以前介绍的那样,我们将获得大量的数据流
17             // 哈哈,准备接收数据吧
18             // 这次我们考虑InputStream流的read(byte[] b)方法
19 
20             byte[] buf = new byte[BUF_SIZE];
21             int readCount = 0;
22             while ((readCount = input.read(buf)) != 0) {
23                 //处理数据buf
24             }
25 
26         } catch (UnknownHostException e) {
27             e.printStackTrace();
28         } catch (IOException e) {
29             e.printStackTrace();
30         }
31 
32     }
33 
34 }
原文地址:https://www.cnblogs.com/xuanyuanzhuo-blog/p/3984664.html