基于Tcp协议的网络多线程编程模板

服务器端 
package com.sherlock.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerTest {
	public static void main(String[] args) throws IOException {
		ServerSocket server = new ServerSocket(11112);
		
		while(true){
			final Socket socket = server.accept();
			new Thread(){
				@Override
				public void run() {
					
					try{
					PrintStream ps = new PrintStream(socket.getOutputStream());
					BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
					while(true){
					String str = br.readLine();
					System.out.println("接受到的字符串是:" + str);
					
					StringBuffer str1 = new StringBuffer(str);
					str=str1.reverse().toString();
					
					ps.println(str);
					}
					}catch(IOException e){
						e.printStackTrace();
					}finally{
						if(socket != null){
							try {
								socket.close();
							} catch (IOException e) {
								// TODO 自动生成的 catch 块
								e.printStackTrace();
							}
						}
					}
					
				}
			}.start();
			
		}
		
	}

}



客户端

package com.sherlock.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class ClientTset {
	public static void main(String[] args) throws UnknownHostException, IOException {
		Socket socket = new Socket("127.0.0.1",11112);
		
		PrintStream ps = new PrintStream(socket.getOutputStream());
		BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		
		while(true){
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个字符串:" );
		String str1 = sc.nextLine();
		ps.println(str1);
		
		String str = br.readLine();
		System.out.println("反转后的字符串是:" + str);

		}
		
		
		
		
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是两个基于 Java 的网络编程多线程编程题目,以及对应的模板和答案,供参考: #### 题目一:多线程 TCP 服务器 要求:实现一个多线程 TCP 服务器,能够同时处理多个客户端的请求。服务器接收到客户端的请求后,将请求信息返回给客户端,并显示客户端的 IP 地址和端口号。 ##### 模板: ```java import java.io.*; import java.net.*; public class MultiThreadTCPServer { public static void main(String[] args) { try { // 创建 ServerSocket 对象 ServerSocket serverSocket = new ServerSocket(<服务器端口号>); while (true) { // 等待客户端连接 Socket socket = serverSocket.accept(); // 创建新线程处理客户端请求 Thread thread = new Thread(() -> { try { // 获取输入输出流 InputStream is = socket.getInputStream(); OutputStream os = socket.getOutputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); PrintWriter pw = new PrintWriter(os); // 接收数据 String request = br.readLine(); System.out.println("收到来自 " + socket.getInetAddress() + ":" + socket.getPort() + " 的请求:" + request); // 发送数据 pw.println("收到您的请求:" + request); pw.flush(); // 关闭连接 br.close(); pw.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } }); thread.start(); } } catch (IOException e) { e.printStackTrace(); } } } ``` ##### 答案: 上面的模板,我们通过 ServerSocket 类创建了一个 TCP 服务器,并指定了服务器的端口号。然后,我们通过 while 循环等待客户端的连接请求。当有新的客户端连接时,我们创建一个新线程来处理客户端的请求。在新线程,我们通过输入输出流进行数据的发送和接收。在接收数据时,我们通过 BufferedReader 对象读取输入流的数据,并通过 InetAddress 和 getPort 方法获取客户端的 IP 地址和端口号。在发送数据时,我们将数据写入 PrintWriter 对象,再通过 flush 方法将数据发送出去。最后,我们通过关闭输入输出流和 Socket 对象来关闭连接。 #### 题目二:多线程 TCP 客户端 要求:实现一个多线程 TCP 客户端,能够向服务器发送多个请求,并显示服务器的响应信息。 ##### 模板: ```java import java.io.*; import java.net.*; public class MultiThreadTCPClient { public static void main(String[] args) { try { // 创建 Socket 对象 Socket socket = new Socket("<服务器IP地址>", <服务器端口号>); // 创建多个线程发送请求 for (int i = 0; i < <线程数量>; i++) { Thread thread = new Thread(() -> { try { // 获取输入输出流 InputStream is = socket.getInputStream(); OutputStream os = socket.getOutputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); PrintWriter pw = new PrintWriter(os); // 发送数据 pw.println("<发送的数据>"); pw.flush(); // 接收数据 String response = br.readLine(); System.out.println("收到服务器响应:" + response); // 关闭连接 br.close(); pw.close(); } catch (IOException e) { e.printStackTrace(); } }); thread.start(); } // 关闭连接 socket.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` ##### 答案: 上面的模板,我们通过 Socket 类创建了一个 TCP 连接,并指定了服务器的 IP 地址和端口号。然后,我们创建多个线程来发送请求,每个线程都通过输入输出流进行数据的发送和接收。在发送数据时,我们将数据写入 PrintWriter 对象,再通过 flush 方法将数据发送出去。在接收数据时,我们通过 BufferedReader 对象读取输入流的数据,并显示服务器的响应信息。最后,我们通过关闭输入输出流和 Socket 对象来关闭连接。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值