利用TCP协议相关知识搭建一个简单的服务器,使服务端可以与多个客户端进行相连,且客户端可以和服务端之间进行多次通信
客户端:
1.首先创建一个Socket对象(地址,端口)
2.创建输出流对象,将低级的输出流包装成高级的打印流
3.进行键盘输入
4.之后的操作进入循环(打印输入的的数据并进行刷新)
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;
public class Client1 {
public static void main(String[] args) throws IOException {
System.out.println("客户端------启动");
try {
Socket socket=new Socket("127.0.0.1",10000);
OutputStream os=socket.getOutputStream();
PrintStream ps=new PrintStream(os);
Scanner sc=new Scanner(System.in);
while (true) {
System.out.println("please said:");
String str=sc.nextLine();
if("exit".equals(str)){
System.out.println("离线");
socket.close();
return;
}
ps.println(str);
ps.flush();
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
服务端:
1:创建一个ServerSocket用来连接端口
2:创建一个输入流对象,对客户发送的数据进行读入
3:创建一个Socket对象来监视是否有信息传入,若有则新搭建一个多线程
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws IOException {
System.out.println("服务端------启动");
try {
ServerSocket serverSocket=new ServerSocket(10000);
while (true) {
Socket socket=serverSocket.accept();
new ServerThread(socket).start();
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
开辟多线程:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;
public class ServerReaderThread extends Thread {
// 定义一个socket变量,用于存储主线程交过来的客户端的Socket连接请求
private Socket socket;
// 定义一个有参数构造器,用于将主线程交过来的客户端的Socket连接请求初始化到私有的socket变量
public ServerReaderThread(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
// 从Socket通信管道中得到字节输入流
InputStream is = socket.getInputStream();
// 将低级的字节输入流转换成字符输入流,并包装成高级的缓冲字符输入流,负责读取接收客户端发送过来的数据。
BufferedReader br = new BufferedReader(new InputStreamReader(is));
// 使用while死循环不断按照行读取客户端发送过来的数据
String msg;
while ( (msg = br.readLine()) != null ) {
// 展示读取到的数据
System.out.println(socket.getRemoteSocketAddress() + "说了:" + msg);
}
} catch (Exception e) { // 捕获异常!
e.printStackTrace();
}
}
}