java知识学习42-TCP协议通信

TCP协议原理:

  

  构造方法和常用方法:

    

    

  

  TCP发送数据的步骤:

    1、创建客户端的socket对象(Socket类);

    2、获取输出流,写数据; OutputStream getOutputStream();

    3、释放资源。 close();

  发送数据简易代码:

    

   

  TCP接收数据的步骤:

    1、创建服务器端的ServerSocket对象(ServerSocket类); ServerSocket(int port);

    2、监听客户端连接,创建一个监听套接字(返回一个Socket对象); Socket accept();

    3、获取输入流,写数据; IutputStream getIutputStream();

    4、释放资源。 close();

  接收数据简易代码:

    

TCP通信-多线程练习案例:

 客户端:没执行一次,服务端分配一个线程执行,并生成一个文件

import java.io.*;
import java.net.Socket;

public class ClientDemo {

public static void main(String[] args) throws IOException {

// 创建客户端socket对象
Socket sc = new Socket("127.0.0.1", 10000);
// 读取文件数据
BufferedReader br = new BufferedReader(new FileReader("D:\JavaProject\src\com\company\demo11\ss.txt"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(sc.getOutputStream()));

String line;
while ((line=br.readLine())!=null) {

bw.write(line);
bw.newLine();
bw.flush();
}
sc.shutdownOutput();

// 客户端收到服务端反馈后,再次反馈给服务端
BufferedReader bcr = new BufferedReader(new InputStreamReader(sc.getInputStream()));
String str;
while ((str=bcr.readLine())!=null) {
System.out.println(str);
}

// 释放资源
br.close();
sc.close();

}
}

服务端:
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerDemo {

public static void main(String[] args) throws IOException {
// 创建服务端Socket对象
ServerSocket ss = new ServerSocket(10000);

while (true) {
// 监听客户端
Socket sa = ss.accept();

// 用多线程方式实现每来一个客户端,就给这个客户端分配一个线程
new Thread(new ServerThread(sa)).start();
}

// 释放资源
// ss.close();
}

服务线程:
import java.io.*;
import java.net.Socket;

public class ServerThread implements Runnable {

private Socket sa;

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

@Override
public void run() {

// 接收客户端的信息,写入到文件中
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(sa.getInputStream()));
int count = 0;
String name = "src\com\company\demo11\sb"+count+".txt";
File file = new File(name);

while (file.exists()) {
count++;
name = "src\com\company\demo11\sb"+count+".txt";
file = new File(name);
}
FileOutputStream osw = new FileOutputStream(file);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(osw));

String line;
while ((line=br.readLine())!=null) {

bw.write(line);
bw.newLine();
bw.flush();
}

// 收到数据后给客户端反馈
BufferedWriter bow = new BufferedWriter(new OutputStreamWriter(sa.getOutputStream()));
bow.write("服务端已经收到数据了!!!");
bow.flush();
sa.shutdownOutput();

// 释放资源
bw.close();
sa.close();

} catch (IOException e) {
e.printStackTrace();
}

}
}
原文地址:https://www.cnblogs.com/blogofzxf/p/14691952.html