首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Java 网络通信必备之socket通信基本原理介绍

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

作者头像
张哥编程
发布2024-12-19 13:56:15
发布2024-12-19 13:56:15
2090
举报
文章被收录于专栏:云计算linux云计算linux

Java socket通信基本原理介绍

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

作者:佚名​

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.  }
  20. }
  21. class ServerThread extends Thread implements ActionListener
  22. {
  23.  private int threadNum;
  24.  private Socket socket;
  25.  talkServerFrm t;
  26.  BufferedReader in;
  27.  PrintWriter out;
  28.  private boolean talking=true;
  29.  public ServerThread(Socket s,int c)
  30.  { threadNum = c;
  31. socket = s;
  32.  }
  33. public void actionPerformed(ActionEvent e)
  34. { Object source = e.getSource();
  35.  try{
  36. if(source==t.btnSend)
  37.  { out.println(t.getTalk());
  38. t.clearTalk();
  39. }else
  40. if(source==t.btnEnd)
  41.  { out.println("谈话过程被对方终止");
  42. out.close();
  43. in.close();
  44. talking = false;
  45.  }
  46.  }catch(IOException ex){
  47.  }
  48. }
  49. public void run()
  50. { try{
  51. t=new talkServerFrm(new Integer(threadNum).toString(),this);
  52. t.setSize(500,500);
  53. t.show();
  54. in = new BufferedReader(new
  55.   InputStreamReader(socket.getInputStream()));
  56. out = new PrintWriter(socket.getOutputStream(),true);
  57.  }catch(Exception e){
  58. }
  59.  new Thread()
  60.  { public void run()
  61. { try{
  62. while(true)
  63. { checkInput();
  64.  sleep(1000);
  65. }
  66.  }catch (InterruptedException ex){
  67.  }catch(IOException ex){
  68.  }
  69.  }
  70.  }.start();
  71.  while(talking)
  72.  { }
  73.  t.dispose();
  74.  }
  75. private void checkInput() throws IOException
  76. { String line;
  77.  if((line=in.readLine())!=null)
  78. t.setPartner(line); file://这是界面类里的方法,
  79. file://用来将line的内容输出到用户界面
  80.  }
  81. }

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-03-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java socket通信基本原理介绍
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档