62,628
社区成员
发帖
与我相关
我的任务
分享import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
//接受客户端发来的消息,然后发送给所有在线的客户端
public class Server {
public static List<Socket> sockets=
new ArrayList<Socket>();
public static List<String> names=new ArrayList<String>();
public static void main(String args[]){
try {
names.add("小白");
names.add("小黑");
names.add("小红");
names.add("小蓝");
names.add("小青");
System.out.println("服务器启动");
ServerSocket server=new ServerSocket(16469);
int content=0;
while(true){
System.out.println("等待客户端链接");
Socket s=server.accept();//等待客户端链接
sockets.add(s);
System.out.println("客户端已链接,目前在线人数"+sockets.size());
new ServerThread(s,names.get(content++)).start();//服务器为每一个客户端分配线程
}
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
class ServerThread extends Thread{
private Socket s;
private String name;
public ServerThread(Socket s,String name){
this.s=s;
this.name=name;
}
public void run(){
try {
BufferedReader br=
new BufferedReader(
new InputStreamReader(
s.getInputStream()));
while(true){
String content=br.readLine();//阻塞状态
for(Socket socket: Server.sockets){
OutputStreamWriter osw=new OutputStreamWriter(socket.getOutputStream());
osw.write(content);
osw.flush();
}
System.out.println(name+":"+content);
}
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client {
public static void mian(String args[]){
try {
System.out.println("客户端启动");
Socket s=new Socket("127.0.0.1",16469);
new SendThread(s).start();
new GetThread(s).start();
} catch (UnknownHostException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
//发送消息的线程
class SendThread extends Thread{
private Socket s;
public SendThread(Socket s){
this.s=s;
}
public void run(){
try {
OutputStreamWriter osw=new OutputStreamWriter(s.getOutputStream());
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
while(true){
String content=br.readLine();
osw.write(content+"\n");
osw.flush();
}
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
//接受消息的线程
class GetThread extends Thread{
private Socket s;
public GetThread(Socket s){
this.s=s;
}
public void run(){
try {
while(true){
BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
String content=br.readLine();//阻塞
System.out.println(content);
}
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
服务器启动
java.net.BindException: Address already in use: JVM_Bind
at java.net.DualStackPlainSocketImpl.bind0(Native Method)
at java.net.DualStackPlainSocketImpl.socketBind(Unknown Source)
at java.net.AbstractPlainSocketImpl.bind(Unknown Source)
at java.net.PlainSocketImpl.bind(Unknown Source)
at java.net.ServerSocket.bind(Unknown Source)
at java.net.ServerSocket.<init>(Unknown Source)
at java.net.ServerSocket.<init>(Unknown Source)
at workspace.Server.main(Server.java:27)