Java 网络通信必备之socket通信基本原理介绍

举报
tea_year 发表于 2021/12/29 22:47:00 2021/12/29
【摘要】 Java socket通信基本原理介绍 Java socket通信在不断的进行相关代码的开发,下面我们就看看如何才能更好的使用有关技术为我们的编程工作带来一定的帮助。 作者:佚名来源:互联网|2010-03-18 20:13     Java socket通信在Java语言中是一个使用很广泛的工具,下面我们...

Java socket通信基本原理介绍

Java socket通信在不断的进行相关代码的开发,下面我们就看看如何才能更好的使用有关技术为我们的编程工作带来一定的帮助。

作者:佚名来源:互联网|2010-03-18 20:13

 

 

Java socket通信在Java语言中是一个使用很广泛的工具,下面我们就来仔细的学习下有关的方法。这对大家在以后的使用中有所帮助,只有不断的学习才能更好的使用。

所谓Java socket通信通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。

以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端, Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说, 套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过 SocketImpl类及其子类完成的。

重要的Socket API:

java.net.Socket继承于java.lang.Object,有八个构造器,其方法并不多,下面介绍使用最频繁的三个方法,其它方法大家可以见JDK-1.3文档。Accept方法用于产生"阻塞",直到接受到一个连接,并且返回一个客户端的Socket对象实例。"阻塞"是一个术语,它使程序运行暂时"停留"在这个地方,直到一个会话产生,然后程序继续;通常"阻塞"是由循环产生的。

getInputStream方法获得网络连接输入,同时返回一个IutputStream对象实例。

getOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。

注意:其中getInputStream和getOutputStream方法均会产生一个IOException,它必须被捕获,因为它们返回的流对象,通常都会被另一个流对象使用。

如何开发一个Server-Client模型的程序

Java socket通信开发原理:

服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。

客户端,使用Java socket通信对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。

重要的Socket API:

java.net.Socket继承于java.lang.Object,有八个构造器,其方法并不多,下面介绍使用最频繁的三个方法,其它方法大家可以见JDK-1.3文档。Accept方法用于产生"阻塞",直到接受到一个连接,并且返回一个客户端的Socket对象实例。"阻塞"是一个术语,它使程序运行暂时"停留"在这个地方,直到一个会话产生,然后程序继续;通常"阻塞"是由循环产生的。

getInputStream方法获得网络连接输入,同时返回一个IutputStream对象实例。

getOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。

注意:其中getInputStream和getOutputStream方法均会产生一个IOException,它必须被捕获,因为它们返回的流对象,通常都会被另一个流对象使用。

如何开发一个Server-Client模型的程序

Java socket通信开发原理:

服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。

客户端,使用Java socket通信对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。

下面和大家分享的是服务器的实现代码。

 
 
  1. import java.net.*;  
  2. import java.io.*;  
  3. import java.awt.event.ActionEvent;  
  4. import java.awt.event.ActionListener;  
  5. public class talkServer  
  6. { public static void main(String[] args)  
  7.  { try 
  8. { file://建立服务器  
  9.  ServerSocket server = new ServerSocket(9998);  
  10.  int i=1;  
  11.  for(;;)  
  12. { Socket incoming = server.accept();  
  13.  new ServerThread(incoming,i).start();  
  14.  i++;  
  15. }  
  16.  }catch (IOException ex){  
  17.  ex.printStackTrace();  
  18. }  
  19.  }  

 

 
 
  1. class ServerThread extends Thread implements ActionListener  
  2. {  
  3.  private int threadNum;  
  4.  private Socket socket;  
  5.  talkServerFrm t;  
  6.  BufferedReader in;  
  7.  PrintWriter out;  
  8.  private boolean talking=true;  
  9.  public ServerThread(Socket s,int c)  
  10.  { threadNum = c;  
  11. socket = s;  
  12.  } 
 
 
  1. public void actionPerformed(ActionEvent e)  
  2. { Object source = e.getSource();  
  3.  try{  
  4. if(source==t.btnSend)  
  5.  { out.println(t.getTalk());  
  6. t.clearTalk();  
  7. }else 
  8. if(source==t.btnEnd)  
  9.  { out.println("谈话过程被对方终止");  
  10. out.close();  
  11. in.close();  
  12. talking = false;  
  13.  }  
  14.  }catch(IOException ex){  
  15.  }  
 
 
  1. public void run()  
  2. { try{  
  3. t=new talkServerFrm(new Integer(threadNum).toString(),this);  
  4. t.setSize(500,500);  
  5. t.show();  
  6. in = new BufferedReader(new   
  7.   InputStreamReader(socket.getInputStream()));  
  8. out = new PrintWriter(socket.getOutputStream(),true);  
  9.  }catch(Exception e){  
  10. }  
  11.  new Thread()  
  12.  { public void run()  
  13. { try{  
  14. while(true)  
  15. { checkInput();  
  16.  sleep(1000);  
  17. }  
  18.  }catch (InterruptedException ex){  
  19.  }catch(IOException ex){  
  20.  }  
  21.  }  
  22.  }.start();  
  23.  while(talking)  
  24.  { }  
  25.  t.dispose();  
  26.  } 
 
 
  1. private void checkInput() throws IOException  
  2. { String line;  
  3.  if((line=in.readLine())!=null)  
  4. t.setPartner(line); file://这是界面类里的方法,  
  5. file://用来将line的内容输出到用户界面  
  6.  }  
  7. }  

到此,java中的socket网络编程就给大家介绍完啦

文章来源: aaaedu.blog.csdn.net,作者:tea_year,版权归原作者所有,如需转载,请联系作者。

原文链接:aaaedu.blog.csdn.net/article/details/88093575

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。