TCP---多客户端向服务端做出请求,服务端接收多客服端的请求(Java)

先来描述一下 TCP的发送数据的步骤,TCP的接收数据步骤

TCP发送数据的步骤:
1.创建客户端的Socket对象(Socket)
2.获取输出流,写数据
3.释放资源
TCP接收数据的步骤:
1.创建服务器端的Socket对象(ServerSocket)
2.获取输入流,读取数据,并把数据显示在数据台
3.释放资源

 字节流
           字节输出流: OutputStream\n" +
           字节输入流: InputStream\n" +
先来一个开胃菜,来熟悉一下用法
一.客户端对服务器进行发送请求,如果服务器做完了,可以给出来相应的回应
package demo26;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

//TCP发送数据的步骤:
//	1.创建客户端的Socket对象(Socket)
//	2.获取输出流,写数据
//	3.释放资源

public class ClientDemo {
	public static void main(String[] args) throws UnknownHostException, IOException {
	   // 里面的127.0.0.1 这里可以填写自己主机的IP地址或主机名称,其他人的也可以,其中返回的是一个字节流。
		Socket s = new Socket("127.0.0.1",41231);
		
		//客户端向服务器发送内容
		OutputStream os=s.getOutputStream();
		//字节
		os.write("java ,我来了".getBytes());
		
		//接收服务器的反馈
		InputStream is = s.getInputStream();
		//创建字节数组进行来接收服务器的回应
		byte[] by = new byte[1024];
		int len = is.read(by);
		String data = new String (by,0,len);
		System.out.println("客户端:"+data);
		s.close();
	}

}
二.服务器的类,接收客户端的内容
package demo26;

import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream.GetField;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

//TCP接收数据的步骤:
//	1.创建服务器端的Socket对象(ServerSocket)
//	2.获取输入流,读取数据,并把数据显示在数据台
//	3.释放资源


public class ServerDemo {
	public static void main(String[] args) throws IOException {
		ServerSocket ss=new ServerSocket(41231);
		Socket s =ss.accept();
		InputStream is = s.getInputStream();
		byte[] by = new byte[1024];
		int len = is.read(by);
		String data= new String(by,0,len);
		System.out.println("服务器:"+data);
		
		//对客户端进行回应
		OutputStream os=s.getOutputStream(); 
		os.write("数据已经收到:".getBytes());
		ss.close();		
	}
}

2. 进阶的客户端----服务端(结合线程)多客户端与服务端

我们期望的是将TCP.txt中的内容通过客户端发送服务端通过字符写在TCP2.txt中。
在这里插入图片描述
在这里插入图片描述

里面的内容是

(1)客户端
package demo26;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;

import demo15.system;

public class ClientDemo3 {
	public static void main(String[] args) throws UnknownHostException, IOException {
		Socket s = new Socket("192.168.223.1",41231);
		BufferedReader br = new BufferedReader(new FileReader("TCP.txt"));
//		封装写字符串数据
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
		String line;
		while ((line=br.readLine())!=null) {
			if (line.equals("886")){
				break;
			}
			else {
				bw.write(line);
				bw.newLine();
				bw.flush();
				
			}
		}
		//这里注意如果没有这个条件服务端将一直等待客户端的发送数据,而在等待客户端。
//		自定义结束标记
		bw.write("886");
		bw.newLine();
		bw.flush();
		
		
//		接收反馈
		BufferedReader br2= new BufferedReader(new InputStreamReader(s.getInputStream()));
		String data = br2.readLine();
		System.out.println("服务器的反馈:"+data);
		br.close();
		s.close();		
	}
}

(2)服务器

在服务器里面我们要结合线程,来接收客户端

package demo26;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerDemo3 {
	public static void main(String[] args) throws IOException {
		ServerSocket ss = new ServerSocket(41231);
		while(true) {
			Socket s = ss.accept();
			new Thread(new ServerThread(s)).start();
		}		
	}
}

创建类
package demo26;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;

public class ServerThread implements Runnable {
	private Socket s;
	public ServerThread(Socket s) {
		this.s=s;
	}
	@Override
	public void run() {
		try {
			BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
			BufferedWriter bw = new BufferedWriter(new FileWriter("TCP2.txt"));
			String line;
			while ((line = br.readLine()) != null) {
				if (line.equals("886")) {
					break;
				}
					System.out.println(line);
					bw.write(line);
					bw.newLine();
					bw.flush();
				
			}
			BufferedWriter br2 = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
			br2.write("文件上传成功");
			br2.newLine();
			br2.flush();
			bw.close();
			s.close();	
		} catch (IOException e) {
			e.printStackTrace();
		}	
	}
}

结果

在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值