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通信,异常处理问题。
直接用这种方式处理: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通信,怎么发送一个byte[]数组?
socket发送的是流,所以必须将byte[]转换成流的形式,之后才可以发送的。创建socket后可以通过下面的方法实现发送: PrintWriter pw = null;pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter( socket.getOutputStream())));//创建一个输入流,之后这个流的指向是socketpw.write(request.toString()); //写入要输入的Byte[],转换为字符串,之后进行传送 pw.close();//传送完毕,关闭流
![java中的socket通信,怎么发送一个byte[]数组?](https://static.wangsu123.cn/pich-amF2YeS4reeahHNvY2tldOmAmuS/oe+8jOaAjuS5iOWPkemAgeS4gOS4qmJ5dGVbXeaVsOe7hO+8nw==g.png)
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是什么意思?
所谓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方法获得网络连接输入,同时返回一个InputStream对象实例。. getOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。注意:其中getInputStream和getOutputStream方法均会产生一个IOException,它必须被捕获,因为它们返回的流对象,通常都会被另一个流对象使用。2ServerSocket类例子编辑package com.lanber.socket;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class ServerDemo {/*** 注意:Socket的发送与接收是需要同步进行的,即客户端发送一条信息,服务器必需先接收这条信息,* 而后才可以向客户端发送信息,否则将会有运行时出错。* @param args*/public static void main(String[] args) {ServerSocket ss = null;try {ss = new ServerSocket(8888);//服务器接收到客户端的数据后,创建与此客户端对话的SocketSocket socket = ss.accept();//用于向客户端发送数据的输出流DataOutputStream dos = new DataOutputStream(socket.getOutputStream());//用于接收客户端发来的数据的输入流DataInputStream dis = new DataInputStream(socket.getInputStream());System.out.println("服务器接收到客户端的连接请求:" + dis.readUTF());//服务器向客户端发送连接成功确认信息dos.writeUTF("接受连接请求,连接成功!");//不需要继续使用此连接时,关闭连接socket.close();ss.close();} catch (IOException e) {e.printStackTrace();}}}3客户端的例子编辑package com.lanber.socket;importjava.io.DataInputStream;import java.io.DataOutputStream;importjava.io.IOException;import java.io.OutputStream;import java.net.Socket;import java.net.UnknownHostException;public class ClientDemo {/*** @param args*/public static void main(String[] args) {Socket socket = null;try {socket = new Socket("localhost",8888);//获取输出流,用于客户端向服务器端发送数据DataOutputStream dos = new DataOutputStream(socket.getOutputStream());//获取输入流,用于接收服务器端发送来的数据DataInputStream dis = new DataInputStream(socket.getInputStream());//客户端向服务器端发送数据dos.writeUTF("我是客户端,请求连接!");//打印出从服务器端接收到的数据System.out.println(dis.readUTF());//不需要继续使用此连接时,记得关闭哦socket.close();} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}} }

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