package org.example;
import java.io.IOException;
import java.net.ServerSocket;
public class Server {
public static void main(String[] args) throws IOException {
final ServerSocket serverSocket = new ServerSocket(8888);
serverSocket.accept();
//阻塞作用
System.in.read();
}
}
C:\Users\14009>netstat -ano | findstr 8888
协议 本地地址 外部地址 状态 PID
TCP 0.0.0.0:8888 0.0.0.0:0 LISTENING 30960
TCP [::]:8888 [::]:0 LISTENING 30960
0.0.0.0:8888
表示监听本地绑定的所有IP的8888端口。当前状态为LISTENING
[::]:8888
是上一行,IPV6的版本。
客户端连接服务端
package org.example;
import java.io.IOException;
import java.net.Socket;
public class client {
public static void main(String[] args) throws IOException {
final Socket socket = new Socket("127.0.0.1", 8888);
//阻塞作用
System.in.read();
}
}
C:\Users\14009>netstat -ano | findstr 8888
TCP 0.0.0.0:8888 0.0.0.0:0 LISTENING 11432
TCP 127.0.0.1:8888 127.0.0.1:62437 ESTABLISHED 11432
TCP 127.0.0.1:62437 127.0.0.1:8888 ESTABLISHED 25556
TCP [::]:8888 [::]:0 LISTENING 11432
以下两行表示服务端继续监听8888端口:
TCP 0.0.0.0:8888 0.0.0.0:0 LISTENING 11432
TCP [::]:8888 [::]:0 LISTENING 11432
以下这行表示服务端监听127.0.0.1:8888
和 客户端127.0.0.1:62437
建立连接(ESTABLISHED)
TCP 127.0.0.1:8888 127.0.0.1:62437 ESTABLISHED 11432
以下这行表示服务端监听127.0.0.1:62437
和 客户端127.0.0.1:8888
建立连接(ESTABLISHED)
TCP 127.0.0.1:62437 127.0.0.1:8888 ESTABLISHED 25556
ipconfig
查看本机ip
无线局域网适配器 WLAN:
连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : fe80::b421:2350:21d9:a057%5
IPv4 地址 . . . . . . . . . . . . : 192.168.0.133
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 192.168.0.1
修改服务端代码,指定监听的ip和端口,前面只是指定端口。
package org.example;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
public class Server {
public static void main(String[] args) throws IOException {
final ServerSocket serverSocket = new ServerSocket();
serverSocket.bind(new InetSocketAddress("192.168.0.133", 8888));
serverSocket.accept();
//阻塞作用
System.in.read();
}
}
查看监听状态
C:\Users\14009>netstat -ano | findstr 8888
TCP 192.168.0.133:8888 0.0.0.0:0 LISTENING 3588
现在只监听具体IP和端口192.168.0.133:8888
。
客户端重新连接
package org.example;
import java.io.IOException;
import java.net.Socket;
public class client {
public static void main(String[] args) throws IOException {
final Socket socket = new Socket("127.0.0.1", 8888);
//阻塞作用
System.in.read();
}
}
抛出如下异常
Exception in thread "main" java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:75)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:476)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:218)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:200)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:162)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:394)
at java.net.Socket.connect(Socket.java:606)
at java.net.Socket.connect(Socket.java:555)
at java.net.Socket.<init>(Socket.java:451)
at java.net.Socket.<init>(Socket.java:228)
at org.example.client.main(client.java:8)
因为服务端现在监听的是192.168.0.133:8888
,而不是127.0.0.1:8888
,因此拒绝连接。
修改客户端为连接192.168.0.133:8888
,则可以连接成功。
package org.example;
import java.io.IOException;
import java.net.Socket;
public class client {
public static void main(String[] args) throws IOException {
final Socket socket = new Socket("192.168.0.133", 8888);
//阻塞作用
System.in.read();
}
}