服务端线程类
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;
public class ServerThread extends Thread {
private Socket soc;
public ServerThread(Socket soc) {
this.soc = soc;
}
@Override
public void run() {
try {
InputStream is = soc.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String msg;
while ((msg = br.readLine()) != null){
System.out.println(soc.getRemoteSocketAddress()+" has sent: "+ msg);
}
} catch (Exception e) {
System.out.println(soc.getRemoteSocketAddress()+" he left~~~");
}
}
}
服务端
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo2 {
public static void main(String[] args) {
System.out.println("=====TCP Server Started=====");
try {
ServerSocket ss = new ServerSocket(4444);
while (true){
Socket soc = ss.accept();
//ss的accept方法返回一个套接字对象,等到了对方request,就在本地生成一个socket对应
System.out.println(soc.getRemoteSocketAddress()+" he came~~~");
new ServerThread(soc).start();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
发送端
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;
public class ClientDemo1 {
public static void main(String[] args) {
System.out.println("====TCP Client Started====");
try {
Socket soc = new Socket("127.0.0.1",4444);
OutputStream os = soc.getOutputStream();
PrintStream ps = new PrintStream(os);
Scanner sc = new Scanner(System.in);
String msg;
while (true){
System.out.println("Input your msg here:");
msg = sc.nextLine();
if ("exit".equals(msg)){
break;
}
ps.println(msg);
ps.flush();
}
// soc.close();别主动关闭,程序跑完对服务端来说回是异常,可以用提示下线的功能
} catch (IOException e) {
e.printStackTrace();
}
}
}
本文介绍了如何使用Java编程实现TCP协议的多线程消息发送。通过创建服务端线程类,详细阐述了服务端和发送端的实现过程,为理解TCP通信和Java多线程提供了实践示例。
1085

被折叠的 条评论
为什么被折叠?



