此文件中描述了Client和Server连接的过程
一、Server:
服务端用ServerSocket对象开启一个端口。并用while循环调用ServerSocket对象的accept()
方法等待客户端连接。
package chat1;
import java.io.*; import java.util.Map;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Server {/**聊天室服务端*/
public static void main(String[] args) {
Server server = new Server();
server.start();
}
//java.net.ServerSocket类似于聊天室服务端的"总机",该"总机"上有若干的"插座"
// 每个插座可以连接一个客户端的插头,实现让多个客户端连接到同一个"总机"上
// ServerSocket有两个功能:
// 1:实例化时向系统申请服务端口(客户端先通过这个端口与总机建立连接)
// 2:一旦一个客户端与总机建立连接,总机就会分配一个"插座"与该客户端沟通
private ServerSocket serverSocket;
public Server(){
try {
System.out.println("正在启动服务端...");
//实例化ServerSocket并指定服务端口,客户端就是通过这个端口连接服务端的。
//(该端口不能与当前计算机上其他应用程序申请的端口重复,否则会抛出异常:
// java.net.BindException: Address already in use:
serverSocket = new ServerSocket(8088);
System.out.println("服务端启动完毕");
} catch (IOException e) {
e.printStackTrace();
}
}
public void start(){
try {
while(true) {
System.out.println("等待客户端连接...");
//ServerSocket上一个重要的方法: Socket accept()
// 该方法用于接受客户端的连接,此方法是一个阻塞方法,调用后方法会"卡住"
// 开始等待客户端的连接,一旦一个客户端连接,那么此方法会立即返回一个
// Socket实例然后继续往下运行(通过这个Socket就可以与刚建立连接的客户端交互了)
Socket socket = serverSocket.accept();
System.out.println("一个客户端连接了!");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
二、Client:
客户端用new Socket("localhost",8088)连接服务端
package chat1;
import java.io.*;
import java.net.Socket;
/**聊天室的客户端*/
public class Client {
//java.net.Socket 单词释义:"插座"。封装了TCP协议的通讯细节,使用它可以与服务端建立
//连接并进行通讯
private Socket socket;
//构造方法,用于初始化客户端
public Client(){
try {
/*Socket常用构造器: Socket(String host,int port)
创建Socket对象时,就会让客户端贺服务端建立连接,此时需要指定服务端的IP
地址和端口。
如果与服务端连接失败,则会抛出异常
注: IP地址中, "localhost":表示本机,"127.0.0.1":也表示本机
*/
System.out.println("正在连接服务端...");
/* Windows系统查看自己电脑的IP地址:
1:win+r 键盘上(窗口键+R) 2:输入cmd 打开控制台 3:输入ipconfig 查看IP地址
Mac系统查看IP地址: 步骤1:打开【终端】 步骤2:输入:/sbin/ifconfig
*/
socket = new Socket("localhost",8088);
System.out.println("与服务连接成功!");
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Client client = new Client();
}
}