java socket编程

来源:互联网 发布:matlab哈密顿回路算法 编辑:程序博客网 时间:2024/06/05 07:23

Socket通信是一种非常重要的通信方式,它使用起来简单方便,也很容易学会,下面就我所知道的简单记录一下。
首先是UDP的方式。(通过Android与PC端进行通信)

发送端:

[java] view plaincopy
  1. package com.zww.socket;  
  2. import java.net.DatagramPacket;    
  3. import java.net.DatagramSocket;    
  4. import java.net.InetAddress;    
  5. public class SocketClient {    
  6.     public static void main(String[] args) {    
  7.         try {    
  8.             // 创建发送方的套接字,IP默认为本地,端口号随机    
  9.             DatagramSocket sendSocket = new DatagramSocket();    
  10.     
  11.             // 确定要发送的消息:    
  12.             String mes = "你好!接收方!";    
  13.     
  14.             // 由于数据报的数据是以字符数组传的形式存储的,所以传转数据    
  15.             byte[] buf = mes.getBytes();    
  16.     
  17.             // 确定发送方的IP地址及端口号,地址为本地机器地址    
  18.             int port = 11511;    
  19.             InetAddress ip = InetAddress.getLocalHost();    
  20.     
  21.             // 创建发送类型的数据报:    
  22.             DatagramPacket sendPacket = new DatagramPacket(buf, buf.length, ip,    
  23.                     port);    
  24.     
  25.             // 通过套接字发送数据:    
  26.             sendSocket.send(sendPacket);    
  27.     
  28.             // 确定接受反馈数据的缓冲存储器,即存储数据的字节数组    
  29.             byte[] getBuf = new byte[1024];    
  30.     
  31.             // 创建接受类型的数据报    
  32.             DatagramPacket getPacket = new DatagramPacket(getBuf, getBuf.length);    
  33.     
  34.             // 通过套接字接受数据    
  35.             sendSocket.receive(getPacket);    
  36.     
  37.             // 解析反馈的消息,并打印    
  38.             String backMes = new String(getBuf, 0, getPacket.getLength());    
  39.             System.out.println("接受方返回的消息:" + backMes);    
  40.     
  41.             // 关闭套接字    
  42.             sendSocket.close();    
  43.         } catch (Exception e) {    
  44.             e.printStackTrace();    
  45.         }    
  46.     
  47.     }    
  48. }   
接收端:

[java] view plaincopy
  1. /** *  */package com.zww.socket;  
  2. import java.net.DatagramPacket;  
  3. import java.net.DatagramSocket;  
  4. import java.net.InetAddress;  
  5. import java.net.SocketAddress;  
  6.   
  7. /** 
  8.  * @zww Administrator 
  9.  * 
  10.  */  
  11. public class SocketServer {  
  12. public static void main(String[] args){  
  13. DatagramSocket serverSocket = null;  
  14. try {  
  15. //确定接收方IP和端口号  
  16. InetAddress ip = InetAddress.getLocalHost();  
  17. int port = 11511;  
  18. //确定接收方的套接字  
  19. serverSocket = new DatagramSocket(port, ip);  
  20. //创建接收byte[]  
  21. byte[] rebuf = new byte[1024];  
  22. //创建接收类型数据报  
  23. DatagramPacket getPacket = new DatagramPacket(rebuf, rebuf.length);  
  24. //通过套接字接收数据  
  25. serverSocket.receive(getPacket);  
  26. //解析收到的消息  
  27. String getMsg = new String(rebuf,0,getPacket.getLength());  
  28. System.out.println("收到的消息"+getMsg);  
  29. //获取发送方的IP  
  30. InetAddress rmIP = getPacket.getAddress();  
  31. int rmport = getPacket.getPort();  
  32. System.out.println("rmIP:"+rmIP+"rmport:"+rmport);  
  33.   
  34. //获取发送放套接字地址  
  35. SocketAddress rmSocket = getPacket.getSocketAddress();  
  36. //反馈消息  
  37. String res = new String("yes I Have received");  
  38. byte[] resbyte = res.getBytes();  
  39.   
  40. //构建发送数据报  
  41. DatagramPacket sendPacket = new DatagramPacket(resbyte, resbyte.length ,rmSocket);  
  42. //通过套接字发送回复  
  43. serverSocket.send(sendPacket);  
  44. serverSocket.close();  
  45. catch (Exception e) {  
  46.   
  47. // TODO: handle exception  
  48. e.printStackTrace();  
  49. }  
  50. }  
  51. }  

现在介绍TCP的实现过程。
客户端代码:

[java] view plaincopy
  1. // 1.根据指定的server地址和端口,建立socket连接。  
  2. Socket socket = new Socket(server, servPort);  
  3. // 2. 根据socket实例获取 OutputStream进行数据写。  
  4.   
  5. OutputStream out = socket.getOutputStream(); 
  6. PrintWriter pw = new PrintWriter(out);
  7. pw.write("hello world!");
  8. pw.flush(); 
  9. out.write(data);  
  10. //3.操作结束,关闭socket.  
  11. socket.shutDownOutput();
  12. pw.close();
  13. out.closer();  

 服务端代码:

[java] view plaincopy
  1.  //1. 构造ServerSocket实例,指定服务端口。  
  2. ServerSocket servSock = new ServerSocket(servPort);  
  3.   
  4.   
  5.   
  6.   
  7. while(true)  
  8. {  
  9.        // 2.调用accept方法,建立和客户端的连接  
  10.            Socket clntSock = servSock.accept();  
  11.   
  12.   
  13.         // 3. 获取连接的InputStream来进行数据读  
  14.             InputStream is = clntSock.getInputStream();  
  15.              
  16.       InputStreamReader isr = new InputStreamReader(is);
  17.   
  18.             BufferedReader br = new BufferedReader(isr);
  19.      
  20.     String data = null;
  21.     while((data=br.readLine)!=null){
  22.     System.out.println(data);
  23.     }
  24. // 4.操作结束,关闭socket.以及其他资源
  25.     clnSock.shutDownInput();
  26.     br.close();
  27.     isr.close();
  28.     is.close();
  29.     servsock.close();
  30.     

  31. }      

0 0