java基础知识之网络通信(TCP通信,UDP通信,多播以及NIO)总结

  

<强> java基础知识之网路通信总结

  

在这篇文章里,我们主要讨论如何使用Java实现网络通信,包括TCP通信,UDP通信,多播以及NIO。

  

<强> TCP连接
  

  

TCP的基础是套接字,在TCP连接中,我们会使用ServerSocket和插座,当客户端和服务器建立连接以后,剩下的基本就是对I/O的控制了。

  

我们先来看一个简单的TCP通信,它分为客户端和服务器端。

  

客户端代码如下:

        简单的TCP客户端   进口java.net。*;   进口. io . *;   公开课SimpleTcpClient {      公共静态void main (String [] args)抛出IOException   {   Socket套接字=零;   BufferedReader br=零;   PrintWriter pw=零;   BufferedReader brTemp=零;   试一试   {   套接字=新的套接字(InetAddress.getLocalHost (), 5678);   br=new BufferedReader(新InputStreamReader (socket.getInputStream ()));   pw=new PrintWriter (socket.getOutputStream ());   brTemp=new BufferedReader(新InputStreamReader(系统));   而(真)   {   字符串行=brTemp.readLine ();   pw.println(线);   pw.flush ();   如果(line.equals(“结束”))休息;   System.out.println (br.readLine ());   }   }   捕获(异常交货)   {   System.err.println (ex.getMessage ());   }   最后   {   如果(套接字!=null) socket.close ();   如果(br !=null) br.close ();   如果(brTemp !=null) brTemp.close ();   如果(pw !=null) pw.close ();   }   }   }      

服务器端代码如下:

        简单版本TCP服务器端   进口java.net。*;   进口. io . *;   公开课SimpleTcpServer {      公共静态void main (String [] args)抛出IOException   {   考察一下服务器=零;   套接字客户=零;   BufferedReader br=零;   PrintWriter pw=零;   试一试   {   服务器=考察(5678);   客户=server.accept ();   br=new BufferedReader(新InputStreamReader (client.getInputStream ()));   pw=new PrintWriter (client.getOutputStream ());   而(真)   {   字符串行=br.readLine ();   pw。println(“回复:“+线);   pw.flush ();   如果(line.equals(“结束”))休息;   }   }   捕获(异常交货)   {   System.err.println (ex.getMessage ());   }   最后   {   如果(服务器!=null) server.close ();   如果(客户!=null) client.close ();   如果(br !=null) br.close ();   如果(pw !=null) pw.close ();   }   }   }      

这里的服务器的功能非常简单,它接收客户端发来的消息,然后将消息”原封不动”的返回给客户端。当客户端发送“结束”时,通信结束。

  

上面的代码基本上勾勒了TCP通信过程中,客户端和服务器端的主要框架,我们可以发现,上述的代码中,服务器端在任何时刻,都只能处理来自客户端的一个请求,它是串行处理的,不能并行,这和我们印象里的服务器处理方式不太相同,我们可以为服务器添加多线程,当一个客户端的请求进入后,我们就创建一个线程,来处理对应的请求。

  

改善后的服务器端代码如下:
  

        多线程版本的TCP服务器端   进口java.net。*;   进口. io . *;   公开课SmartTcpServer {   公共静态void main (String [] args)抛出IOException   {   考察一下服务器=考察(5678);   而(真)   {   套接字客户=server.accept ();   线程的线程=new ServerThread(客户端);   thread.start ();   }   }   }      类ServerThread扩展了线程   {   私人Socket套接字=零;      公共ServerThread (Socket套接字)   {   这一点。套接字=套接字;   }      公共空间run () {   BufferedReader br=零;   PrintWriter pw=零;   试一试   {   br=new BufferedReader(新InputStreamReader (socket.getInputStream ()));   pw=new PrintWriter (socket.getOutputStream ());   而(真)   {   字符串行=br.readLine ();   pw。println(“回复:“+线);   pw.flush ();   如果(line.equals(“结束”))休息;   }   }   捕获(异常交货)   {   System.err.println (ex.getMessage ());   }   最后   {   如果(套接字!=null)   尝试{   socket.close ();   }捕捉(IOException e1) {   e1.printStackTrace ();   }   如果(br !=null)   尝试{   br.close ();   }捕捉(IOException e) {   e.printStackTrace ();   }   如果(pw !=null) pw.close ();   }   }   }

java基础知识之网络通信(TCP通信,UDP通信,多播以及NIO)总结