Java Socket编程

 对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket。服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了。首先ServerSocket将在服务端监听某个端口,当发现客户端有Socket来试图连接它时,它会accept该Socket的连接请求,同时在服务端建立一个对应的Socket与之进行通信。这样就有两个Socket了,客户端和服务端各一个。

       对于Socket之间的通信其实很简单,服务端往Socket的输出流里面写东西,客户端就可以通过Socket的输入流读取对应的内容。Socket与Socket之间是双向连通的,所以客户端也可以往对应的Socket输出流里面写东西,然后服务端对应的Socket的输入流就可以读出对应的内容。下面来看一些服务端与客户端通信的例子:


 客户端代码

Java代码   收藏代码
  1. public class Client {  
  2.    
  3.    public static void main(String args[]) throws Exception {  
  4.       //为了简单起见,所有的异常都直接往外抛  
  5.       String host = "192.168.1.254";  //要连接的服务端IP地址  
  6.       int port = 10006;   //要连接的服务端对应的监听端口  
  7.       //与服务端建立连接  
  8.       Socket client = new Socket(host, port);  
  9.       //建立连接后就可以往服务端写数据了  
  10.       Writer writer = new OutputStreamWriter(client.getOutputStream());  
  11.       writer.write("Hello world.");  
  12.       writer.flush();//写完后要记得flush  
  13.       writer.close();  
  14.       client.close();  
  15.    }  
  16.      
  17. }  
注意一点,如果写操作之后程序不是对应着输出流的关闭,而是进行其他阻塞式的操作(比如从输入流里面读数据),记住要 flush 一下,只有这样服务端才能收到客户端发送的数据,否则可能会引起两边无限的互相等待

  服务端代码

 

Java代码   收藏代码
  1. public class Server {  
  2.    
  3.    public static void main(String args[]) throws IOException {  
  4.       //为了简单起见,所有的异常信息都往外抛  
  5.       int port = 10006;  
  6.       //定义一个ServerSocket监听在端口10006上  
  7.       ServerSocket server = new ServerSocket(port);  
  8.       //server尝试接收其他Socket的连接请求,server的accept方法是阻塞式的  
  9.       Socket socket = server.accept();  
  10.       //跟客户端建立好连接之后,我们就可以获取socket的InputStream,并从中读取客户端发过来的信息了。  
  11.       Reader reader = new InputStreamReader(socket.getInputStream());  
  12.       char chars[] = new char[64];  
  13.       int len;  
  14.       StringBuilder sb = new StringBuilder();  
  15.       while ((len=reader.read(chars)) != -1) {  
  16.          sb.append(new String(chars, 0, len));  
  17.       }  
  18.       System.out.println("from client: " + sb);  
  19.       reader.close();  
  20.       socket.close();  
  21.       server.close();  
  22.    }  
  23.      
  24. }  
当然这是比较简单的一对一的连接,在现实中客户端和服务端是既可以写信息也是需要读信息,以及多个客户端同时连接服务端的情况




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值