java的socket通信(java socket编程例子)

      最后更新:2023-05-04 01:59

      java Socket通信原理

      具体如下:首先socket 通信是基于TCP/IP 网络层上的一种传送方式,我们通常把TCP和UDP称为传输层。其中UDP是一种面向无连接的传输层协议。UDP不关心对端是否真正收到了传送过去的数据。如果需要检查对端是否收到分组数据包,或者对端是否连接到网络,则需要在应用程序中实现。UDP常用在分组数据较少或多播、广播通信以及视频通信等多媒体领域。在这里我们不进行详细讨论,这里主要讲解的是基于TCP/IP协议下的socket通信。socket是基于应用服务与TCP/IP通信之间的一个抽象,他将TCP/IP协议里面复杂的通信逻辑进行分装。服务端初始化ServerSocket,然后对指定的端口进行绑定,接着对端口及进行监听,通过调用accept方法阻塞。此时,如果客户端有一个socket连接到服务端,那么服务端通过监听和accept方法可以与客户端进行连接。Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。
      我发个图给你,没看懂再留言吧
      通过tcp/IP或者udp进行网络通讯。 如果还要继续深究的话,建议你看看网络协议方面的书籍
      java Socket通信原理

      java多线程socket通信原理是什么?

      第一,程序是通过分时进行服务的。就是说一个程序监听一个端口,第一秒可以从别的地方来一个包,第二秒可以从另一个地方来一个包。 第二,每个socket都会有包发送来的ip地址和端口号,服务器向这个ip对应机器的端口发送数据以回应对方。
      简单点说, 每个socket都保有一些信息, 比如他所对应的客户端地址和端口等等, 来唯一确定他所负责的客户端, 所以任何到达10000端口的包都可以有去处: 如果已经有socket和他对应了, 那么交给socket处理, 如果没有, 那么放进请求队列, 等待.accept()方法去抽取他并生成一个socket来和他对应.
      当Server每接受到一个Client连接请求之后,都把处理流程放到一个独立的线程里去运行,然后等待下一个Client连接请求,这样就不会阻塞Server端接收请求了。每个独立运行的程序在使用完Socket对象之后要将其关闭。这样就实现了多线程socket通信。
      socket 需要 把自己的 ip 告诉ServerSocket,就是根据ip来区分的
      防止阻塞 如果不用线程,你在主线程中侦听端口, 那么你会发现,你如果不连接上的话,就会一直在等待,什么也做不了。
      java多线程socket通信原理是什么?

      java里socket通信,异常处理问题。

      直接用这种方式处理:while(true){socket = new Socket(("192.168.183.1", 9002);socket.setSoTimeout(5000);//5000ms = 5stry{socket.connect();}catch(IOException e){//这行写你提示通信失败提示continue;}}
      在建立socket连接时设置超时时间,连接不上的话就反馈连接失败不就可以了嘛
      try catch 处理下 连不上没有必要继续了吧
      java里socket通信,异常处理问题。

      java socket一对多通信如何实现?

      【server端】 import java.io.*;import java.net.*;public class MultiSocketServer{public static void main(String str[]) throws IOException{ServerSocket server=new ServerSocket(3333);//绑定端口while(true){Socket client=server.accept();//监听ChildTh child=new ChildTh(client);Thread t=new Thread(child);t.start();}}}class ChildTh implements Runnable{private Socket client;public ChildTh(Socket client){this.client=client;}public void run() {try{BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));PrintWriter out=new PrintWriter(client.getOutputStream());while(true){String s=in.readLine();System.out.println(s);out.println("has received……");out.flush();if(s.equals("end"))break;}client.close();}catch(Exception e){e.printStackTrace();}}}【client端】import java.net.*;import java.io.*;public class MultiSocketClient{static Socket server;public static void main(String str[]) throwsIOException{server=new Socket("222.195.151.47",3333);BufferedReader in=new BufferedReader(new InputStreamReader(server.getInputStream()));PrintWriter out=new PrintWriter(server.getOutputStream());BufferedReader wt=new BufferedReader(new InputStreamReader(System.in));while(true){String s=wt.readLine();out.println(s);out.flush();if(s.equals("end")){break;}System.out.println(in.readLine());}server.close();} }
      服务器端发送消息,你要知道给哪个客户端发,应该是将所有的客户端连接都放在数组里,然后遍历数组发送 参考下吧:http://wenku.baidu.com/view/a9598469c5da50e2524d7f82.html
      看看是不是线程被锁住了,比如socket.read(),最好是一个连接用独立的线程,这样不会相互影响
      java socket一对多通信如何实现?

      Java 关于Socket通信对象流传输的问题

      建议采用Tcpmessage,在报文体里写你要传的东西,设置不同的报文头,通过独到的报文头判断你传的是对象是文件
      你的这一段代码从逻辑上来说是没有问题的。建议你贴出更多的代码来! 我建议你不要把socket 和 in 、out的new放过放到这里来。
      建议使用 xml 或JSON 传输内容,而不是直接传输对象
      trAddInfo 中的对象所对应的类实现 Serializable接口。
      Java 关于Socket通信对象流传输的问题

      本文由 在线网速测试 整理编辑,转载请注明出处。

          热门文章

          文章分类