//用户端
package TCP;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class Client{ //
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);//用来发送的
try(Socket socket = new Socket("127.0.0.1",9999)){
OutputStream os = socket.getOutputStream();
OutputStreamWriter osWriter = new OutputStreamWriter(os,"utf-8");
PrintWriter printWriter = new PrintWriter(osWriter);
//=================================获取服务器反馈
InputStream is = socket.getInputStream(); //从通道中获取字节流
InputStreamReader isReader = new InputStreamReader(is,"utf-8");//字节流以utf8形式反序列化为字符流
Scanner scan = new Scanner(isReader);//利用Scnner的方法处理
System.out.println("请输入发送内容:");
while(scanner.hasNext()){
String str = scanner.nextLine();
printWriter.println(str);
printWriter.flush(); //发送完毕
String res = scan.nextLine();
System.out.println("服务器反馈: "+ res);
System.out.println("请输入发送内容:");
}
}
}
}
//服务器端
package TCP;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class Server{ //
public static void main(String[] args) throws IOException {
try(ServerSocket serverSocket = new ServerSocket(9999)){
Socket socket = serverSocket.accept();//等待客户端请求建立连接通道
InputStream is = socket.getInputStream(); //从通道中获取字节流
InputStreamReader isReader = new InputStreamReader(is,"utf-8");//字节流以utf8形式反序列化为字符流
Scanner scan = new Scanner(isReader);//利用Scnner的方法处理
OutputStream os = socket.getOutputStream();//发射字节流
OutputStreamWriter osWriter = new OutputStreamWriter(os,"utf-8");//序列化
PrintWriter printWriter = new PrintWriter(osWriter);//利用printWriter的方法
while(scan.hasNext()){
String str = scan.nextLine();
System.out.println("已接收: "+str);
System.out.println("=================");
String res = str;
printWriter.println(res);//反馈回客户端
printWriter.flush();//千万不能忘记
}
}
}
}
为了使服务器可以同时响应多个用户,可以将建立通道及以下的所有部分作为线程类的对象,主线程只用来分配其他线程。