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();
}
}
}