大家好,Java实现Tcp及时通信。
//实现群发功能
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
public class ClientTcp {
public static void main(String[] args) throws Exception {
System.out.println("====客户端已启动====");
// 创建一个独立的线程读这个客户端收到的消息
Socket socket=new Socket("127.0.0.1",8999);
// socket 得到字节输出管道,输出数据
new ClientReaderThread(socket).start();
OutputStream os = socket.getOutputStream();
// 用于输出文本print流方便
PrintStream ps=new PrintStream(os);
Scanner sc=new Scanner(System.in);
while (true) {
System.out.println("请说:");
String s = sc.nextLine();
ps.println(s);
ps.flush();
}
}
static class ClientReaderThread extends Thread{
private Socket socket;
public ClientReaderThread (Socket socket){
this.socket=socket;
}
@Override
public void run() {
try {
InputStream is = socket.getInputStream();
// 包装为缓冲字符输入流
BufferedReader br=new BufferedReader(new InputStreamReader(is));
String msg;
while ((msg=br.readLine())!=null)
{
System.out.println("收到消息:"+msg);
}
} catch (Exception e) {
System.out.println("服务端把你踢出去了。。。");
}
}
}
}
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
public class ServerTcp {
private static List<Socket> allonlineSockets=new ArrayList<>();
public static void main(String[] args) throws Exception {
System.out.println("=====服务端启动=====");
ServerSocket serverSocket=new ServerSocket(8999);
while (true) {
Socket socket = serverSocket.accept();
System.out.println(socket.getRemoteSocketAddress()+"上线了");
allonlineSockets.add(socket);
new Mythread(socket).start();
}
}
public static class Mythread extends Thread{
private Socket socket;
public Mythread (Socket socket){
this.socket=socket;
}
@Override
public void run() {
try {
InputStream is = socket.getInputStream();
// 包装为缓冲字符输入流
BufferedReader br=new BufferedReader(new InputStreamReader(is));
String msg;
while ((msg=br.readLine())!=null)
{
System.out.println(socket.getRemoteSocketAddress()+"说了:"+msg);
sendMsg(msg);
}
} catch (Exception e) {
System.out.println(socket.getRemoteSocketAddress()+"下线了");
ServerTcp.allonlineSockets.remove(socket);
}
}
private void sendMsg(String msg) throws Exception {
for (Socket socket : ServerTcp.allonlineSockets) {
PrintStream ps=new PrintStream(socket.getOutputStream());
ps.println(msg);
ps.flush();
}
}
}
}
总结:
靠Socket连接进行客户端向服务端传数据,再由服务端传入客户端。