您的位置:首页 > 理论基础 > 计算机网络

网络编程:server服务器转发消息,多个客户端实现群聊

2016-07-27 11:04 666 查看
依然直接上图:



下面是代码实现:

Client.java

<span style="font-size:18px;">import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

/**
* 客户端
*
* @author 周孟军 时间:2016年7月27日 上午10:00:41
*
*/
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException {

Socket s = new Socket("127.0.0.1", 1099);
Read r = new Read(s);
r.start();
new Write(s).start();
}

}</span>

Server.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

/**
* 服务器端
*
* @author 周孟军 时间:2016年7月27日 上午9:59:25
*
*/
public class Server {
public static void main(String[] args) throws IOException {
List<Task> list = new ArrayList<>();

ServerSocket ss = new ServerSocket(1099);
System.out.println("服务器已启动---->");

while (true) {
Socket s = ss.accept();
System.out.println(s.getInetAddress() + "用户接入");
Task t = new Task(s, list);
list.add(t);
t.start();
}

}
}

class Task extends Thread {
Socket s;
List<Task> clients;

public Task(Socket s, List<Task> clients) {
super();
this.s = s;
this.clients = clients;
}

@Override
public void run() {

while (true) {
try {
InputStreamReader isr = new InputStreamReader(s.getInputStream());
BufferedReader br = new BufferedReader(isr);
String str = br.readLine();

// 转发消息
for (Task task : clients) {
PrintWriter pw = new PrintWriter(task.s.getOutputStream());
pw.println(str);
pw.flush();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}


Read.java
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.Socket;

public class Read extends Thread {
Socket s;

public Read(Socket s) {
super();
this.s = s;
}

@Override
public void run() {
while (true) {
try {
// 不停的接收消息
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
System.out.println(br.readLine());
} catch (Exception e) {
e.printStackTrace();
}
}
}
}

Write.java
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class Write extends Thread {
Socket s;

public Write(Socket s) {
super();
this.s = s;
}

@Override
public void run() {
while (true) {
try {
PrintWriter pw = new PrintWriter(s.getOutputStream());
Scanner can = new Scanner(System.in);
pw.println("---> " + can.nextLine());
pw.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}

完工!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: