服务端
package com.easychat.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketServer {
public static void main(String[] args) {
//创建一个socket
ServerSocket server = null;
try {
server = new ServerSocket(1010);
System.out.println("服务端已经启动,等待客户端连接");
//等待客户端有人连接
Socket socket = server.accept();
//获取ip地址
String ip = socket.getInetAddress().getHostAddress();
//socket.getPort获取端口
System.out.println("有客户端链接:"+ip+"端口:"+socket.getPort());
//开启一个多线程
new Thread(new Runnable() {
@Override
public void run() {
while (true){
try{
// 获取输入流,用于从套接字接收数据
InputStream inputStream = socket.getInputStream();
// 将字节流转换为字符流
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
// 使用缓冲字符流,以提高读取效率
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
// 读取一行客户端发送的数据
String readData = bufferedReader.readLine();
// 打印收到的客户端消息
System.out.println("收到来自客户端消息"+ip+"消息->"+readData);
}catch(Exception e){
e.printStackTrace();
}
}
}
}).start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端
package com.easychat.test;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class SocketClient {
public static void main(String[] args) {
// 创建一个Socket对象,指定要连接的服务器地址及端口号
Socket socket = null;
try {
// 尝试连接到本地主机(127.0.0.1)的1010端口
socket = new Socket("127.0.0.1",1010);
获取Socket的输出流,用于向服务器发送数据
OutputStream outputStream = socket.getOutputStream();
//使用PrintWriter包装输出流,以便于写入文本数据
PrintWriter printWriter = new PrintWriter(outputStream);
// 提示用户输入内容
System.out.println("请输入内容");
new Thread(new Runnable() {
@Override
public void run() {
while (true){
// 创建Scanner对象读取控制台输入
Scanner scanner = new Scanner(System.in);
//读取用户的一行输入
String input = scanner.nextLine();
// 将用户输入的内容写入输出流,并发送到服务器
printWriter.println(input);
// 刷新输出流,确保数据立即被发送
printWriter.flush();
}
}
}).start();
} catch (IOException e) {
e.printStackTrace();
}
}
}