黑马程序员——网络编程之TCP协议

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

TCP协议案例

/*
 * 需求:
 * 服务端接收数据并写入文本文件,写入完毕后提示客户端文件上传完毕
 * 用线程实现服务器端能够同时接收多个客户端的访问 
 */
创建服务器接收文件的线程类

 tcp协议传输数据
 由于tcp传输需要建立连接,所以数据的传输都是在建立连接以后进行的,是在连接通道中传输的。所以服务器端一定要先开启。
 接收数据:
 	A:创建接收端的Socket对象,指明端口号
 		ServerSocket(int port)
 		
	B:监听客户端连接。返回一个对应的Socket对象,以便得到对应的信息
		public Socket accept()
		
	C:通过返回的Socket对象获取输入流,读取数据显示在控制台
		public InputStream getInputStream()
		
	D:释放资源
import java.io.BufferedReader;
import java.io.BufferedWriter;
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 {

	// 利用构造参数传递服务端获取的Socket对象
	private Socket s;

	public ServerThread(Socket s) {
		this.s = s;
	}

	// 把获取到客户端Socket后的操作用线程实现
	@Override
	public void run() {
		try {
			// 获取通道输入流并封装
			BufferedReader br = new BufferedReader(new InputStreamReader(
					s.getInputStream()));
			// 创建字符输出流对象
			BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));
			// 读取数据并输出到文本文件
			String line = null;
			while ((line = br.readLine()) != null) {
				bw.write(line);
				bw.newLine();
				bw.flush();
			}

			// 获取通道输出流对象并封装
			BufferedWriter bw2 = new BufferedWriter(new OutputStreamWriter(
					s.getOutputStream()));
			// 输出提示到客户端
			bw2.write("文件上传完毕");
			bw2.flush();

			// 释放资源
			bw.close();
			s.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}
创建服务器对象并开启服务器

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

public class ServerTest {

	public static void main(String[] args) throws IOException {
		//创建服务端Socket对象
		ServerSocket ss = new ServerSocket(22222);
		//用循环获取客户端对象并开启线程
		while(true){
			Socket s = ss.accept();
			new Thread(new ServerThread(s)).start();
		}
	}
}

客户端上传文件并读取服务器的反馈

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

/*
 * 客户端读取文件发送到服务器,并读取服务器返回的提示
 */
public class UploadDemo {

	public static void main(String[] args) throws IOException {
		// 创建客户端对象
		Socket s = new Socket("127.0.0.1", 22222);
		// 获取并封装通道输出流
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
				s.getOutputStream()));
		// 创建字符输入流对象
		BufferedReader br = new BufferedReader(new FileReader("a.txt"));
		// 读取文本文件内容并输出到服务器
		String line = null;
		while ((line = br.readLine()) != null) {
			bw.write(line);
			bw.newLine();
			bw.flush();
		}
		// 客户端提示关闭管道输出流
		s.shutdownOutput();
		// 获取并封装通道输入流对象
		BufferedReader br2 = new BufferedReader(new InputStreamReader(
				s.getInputStream()));
		//读取服务器返回的提示
		String str = br2.readLine();
		System.out.println(str);
		
		// 释放资源
		br.close();
		s.close();

	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一夸克

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值