单线程聊天室
项目设计流程:
1.创建项目
两个模板:服务器模块,客户端模块
2.服务器
创建ServerSocket,绑定端口
接收客户端连接,Socket
通过Socket发送和接收数据
关闭ServerSocket/Socket
3.客户端
创建Socket,指定服务器的地址和服务端口(连接指定服务)
通过Socket发送和接收数据
关闭Socket
服务器——ModuleServer—SingleServer
package com.lamb;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class SingleServer {
public static void main(String[] args) throws IOException {
//1.创建服务器Socket,端口号为4399
ServerSocket serverSocket = new ServerSocket(4399);
System.out.println("等待客户端连接....");
//2.等待客户端连接,有连接则显示客户端的Socket对象,否则线程阻塞
Socket socket = serverSocket.accept();
System.out.println("有客户端连接,端口号为"+socket.getPort());
//3.1接收数据
InputStream inputStream = socket.getInputStream();
Scanner scanner = new Scanner(inputStream);
String message = scanner.nextLine();
System.out.println("接受到客户端消息:"+message);
//3.2发送数据
OutputStream outputStream = socket.getOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(outputStream);
writer.write("你好客户端\n");
writer.flush();
//4.关闭Socket
socket.close();
}
}
客户端——ModuleClient—SingleClient
package com.lamb;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.Scanner;
public class SingleClient {
public static void main(String[] args) throws IOException {
String serverName = "127.0.0.1";
Integer port = 4399;
try {
//1.创建客户端socket连接服务器
Socket socket = new Socket(serverName, port);
System.out.println("已连接上服务器,服务器地址为:" + socket.getInetAddress());
//2.1发送数据
OutputStream outputStream = socket.getOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(outputStream);
writer.write("你好服务器\n");
writer.flush();
//2.2接收数据
InputStream inputStream = socket.getInputStream();
Scanner scanner = new Scanner(inputStream);
String message = scanner.nextLine();
System.out.println("接收到服务器消息:"+message);
//3.关闭Socket
socket.close();
}catch(IOException e){
System.out.println("客户端通信出现异常,错误为:"+e);
}
}
}