单线程下聊天室
服务器端
package Singchatroom;
import java.io.IOException;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class SingServer {
public static void main(String[] args)throws Exception {
ServerSocket serverSocket=new ServerSocket(6666);
try {
System.out.println("等待客户端连接");
//有客户端连接,返回客户端的Socket对象,否则线程一直阻塞在此处
Socket client=serverSocket.accept();
System.out.println("有新的客户端连接,端口号为:"+client.getPort());
//获取客户端的输入输出流
Scanner clientInput=new Scanner(client.getInputStream());
PrintStream clientout=new PrintStream(client.getOutputStream(),true,"UTF-8");
//读取客户端输入
if(clientInput.hasNext()){
System.out.println(client.getInetAddress()+"说:"+clientInput.nextLine());
}
//向客户端输出
clientout.println("I am server");
//关闭输入输出流
clientInput.close();
clientout.close();
//关闭基站
serverSocket.close();
} catch (IOException e) {
System.out.println("服务器端通信出现异常");
}
}
}
客户端
ackage Singchatroom;
import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;
public class SingClient {
public static void main(String[] args)throws Exception {
String serverName="127.0.0.1";
Integer port=6666;
try {
Socket client=new Socket(serverName,port);
System.out.println("连接上服务器,服务器地址为:"+client.getInetAddress());
//获取输入输出流,因为服务器端先获取客户端的输入流,所以客户端先输出,否则二者互相等待,出现阻塞状态
PrintStream out=new PrintStream(client.getOutputStream(),true,"UTF-8");
Scanner in=new Scanner(client.getInputStream());
//向服务器输出内容
out.println("I am client");
//读取服务器内容
if(in.hasNext()){
System.out.println(client.getInetAddress()+"说:"+in.nextLine());
}
//关闭输入输出流
in.close();
out.close();
//关闭客户端
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}