4.1、Address already in use : JVM_Bind
【Socket】三、Socket使用线程池支持多个线程同时访问
首先玩这个需要知道本机IP地址,那么,Windows + R - > CMD ->输入命令 ipconfig
如图找到IP地址
一、配置Socket端口号与IP地址
public class SocketConfig {
/** IP地址,每台主机IP都不同,请修改 */
public static final String IP_ADDRESS = "192.168.**.***";
/** 端口号 */
public static final Integer PORT = 8088;
}
二、UDP协议
2.1、 UDP服务端类
public class UdpServer {
public static void main(String[] args) throws IOException {
System.out.println("udp接受数据启动.......");
DatagramSocket ds = new DatagramSocket(SocketConfig.PORT);
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
// 阻塞效果
ds.receive(dp);
System.out.println("来源:" + dp.getAddress().getHostAddress() + ",port:" + dp.getPort());
String str = new String(dp.getData(),0,dp.getLength());
System.out.println("客户端发送数据:"+str);
ds.close();
}
}
2.2、UDP客户端类
public class UdpClient {
public static void main(String[] args) throws IOException {
System.out.println("udp 发送数据");
DatagramSocket ds = new DatagramSocket();
String str = "客户端发送数据....";
byte[] strByte = str.getBytes();
DatagramPacket dp = new DatagramPacket(strByte,
strByte.length, InetAddress.getByName(SocketConfig.IP_ADDRESS),
SocketConfig.PORT
);
ds.send(dp);
ds.close();
}
}
2.3、运行结果
2.4、UDP说明
QQ使用的协议即是UDP,不管接受者是否在线,信息也会发送过去。不管连不连接。
且UDP协议与TCP服务是不互通的,也就是说通过UDP协议开启的端口浏览器是访问不到的。
但TCP可以做到,因为HTTP默认TCP。 PS:UDP协议毫无反应
以下即是TCP协议通过浏览器访问后打印的数据,虽然页面是无展示,但服务器会有数据
三、TCP协议
3.1、服务端类
public class TcpServer {
public static void main(String[] args) throws IOException {
System.out.println("socket服务器端启动....");
ServerSocket serverSocket = new ServerSocket(SocketConfig.PORT);
//获取客户端对象
Socket accept = serverSocket.accept();
InputStream inputStream = accept.getInputStream();
byte[] buf= new byte[1024];
int len=inputStream.read(buf);
String str =new String(buf,0,len);
System.out.println("str:" + str);
serverSocket.close();
}
}
3.2、客户端类
public class TcpClinet {
public static void main(String[] args) throws IOException {
System.out.println("socket启动....");
Socket s = new Socket(SocketConfig.IP_ADDRESS, SocketConfig.PORT);
OutputStream outputStream = s.getOutputStream();
outputStream.write("我是客戶端....".getBytes());
s.close();
}
}
3.3、运行结果
3.4、三次握手与四次分手
3.4.1 三次握手
来一个流程图
3.4.2 四次分手
四次分手的传递过程其实就是三次握手的过程的一个反转,这里就不详细说明。PS:自行脑补 /手动滑稽
3.5、使用场景
HTTP协议即是TCP协议
四、网络通讯容易遇到的BUG
4.1、Address already in use : JVM_Bind
将TCP协议服务的端口改为一个已使用的端口,比如说8080,或者是开两个服务使用一样的端口,即会出现该错误,Tomcat端口号占用即是如此
4.2、Connection refused:connet
在不开启TCP服务类时,开启TCP客户端即会抛出该异常
该错误意思为连接被拒绝,有两种原因:
1.、连接超时
2、连接端口并未开启,或已经关闭 (当前演示的是这个原因)