TCP编程

一、TCP(面向连接的通信)
  TCP通信能实现两台计算机之间的数据交互,通信的两端,要严格区分客户端(Client)和服务器(Server)。
二、通信步骤(通信原理)

  1. 服务器端先启动
  2. 客户端请求–>服务器端
  3. 客户端< – >服务器端【逻辑连接(有一个对象)
  4. 逻辑连接含有客户端提供的** IO对象 **(字节流对象)

** IO对象 **
TCP连接的示意图:

  • 注意:
  1. 服务器必须明确和哪个客户端交互,而且需要多个IO流对象。
  • 服务器端方法 ** accpet **,客户端获取 –> 客户端对象。
  • 服务器(没有IO流) –> 服务器获取请求客户端对象Socket
  • (服务器用的客户端的IO流交互)
  • 服务器使用客户端的字节输入流(读取)客户端发送的数据
  • 服务器使用客户端的字节输出流(回写)给客户端数据

Server(服务器)

1
2
3
4
1.指定端口 使用ServerSocket创建服务器
2.阻塞式等待连接accept
3.操作:使用输入输出流操作
4.释放资源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args)throws IOException {
System.out.println("----Server(服务器)----");
//1.指定端口 使用ServerSocket创建服务器
ServerSocket server=new ServerSocket(8088);
//2.阻塞式等待连接accept
Socket client=server.accept();
System.out.println("一个客户端建立了连接");
//3.操作:使用输入输出流操作
DataInputStream shuru=new DataInputStream(client.getInputStream());/用DataInputStream输入流
String data=shuru.readUTF();//输入
//4.释放资源
shuru.close();//释放shuru
client.close();//释放Client
server.close();//释放server服务器对象
}
}

Client(客户端)

1
2
3
1.建立连接:使用Socket建立窗户段+服务的地址和端口
2.第一步连接好了直接操作:使用输入输出流操作
3.释放资源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException{
System.out.println("----Client(客户端)----");
//1.建立连接:使用Socket建立窗户段+服务的地址和端口
Socket client=new Socket("localhost",8088);//创建client对象去接收服务器的东西
//2.第一步连接好了直接操作:使用输入输出流操作
DataOutputStream shuchu=new DataOutputStream(client.getOutputStream());//用DataOutputStream输出流
String data="hello";//输出一个字符串 hello
shuchu.writeUTF(data);//shuchu写入
shuchu.flush();
//3.释放资源
shuchu.close();//释放输出
client.close(); //释放client对象
}
}

三、TCP文件上传
  在前面的基础上只需要将传输的数据做更改即可达到单向传输!

Client(客户端)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException{
System.out.println("----Client(客户端)----");

BufferedReader console=new BufferedReader(new InputStreamReader(System.in));//用BufferedReader类型去创建输入用户名和密码
System.out.println("请输入用户名");
String uname=console.readLine();
System.out.println("请输入密码");
String upassword=console.readLine();

//1.建立连接:使用Socket建立窗户段+服务的地址和端口
Socket client=new Socket("localhost",8088);
//2.第一步连接好了直接操作:使用输入输出流操作
DataOutputStream shuchu=new DataOutputStream(client.getOutputStream());//输
shuchu.writeUTF("uname="+uname+"&"+"upassword="+upassword);
shuchu.flush();
//3.释放资源
shuchu.close();
client.close();
}
}

Server(服务器)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args)throws IOException {
System.out.println("----Server(服务器)----");
//1.指定端口 使用ServerSocket创建服务器
ServerSocket server=new ServerSocket(8088);
//2.阻塞式等待连接accept
Socket client=server.accept();
System.out.println("一个客户端建立了连接");
//3.操作:使用输入输出流操作
DataInputStream shuru=new DataInputStream(client.getInputStream());//输入流
String datas=shuru.readUTF();

//分析数据
String[] dataArray=datas.split("&");//用&分割
for(String info:dataArray)//增强型for循环输出
{
String[] userinfo=info.split("=");
System.out.println(userinfo[0]+"-->"+userinfo[1]);

}

//4.释放资源
shuru.close();
client.close();
server.close();
}
}

代码结果如下:

  • 客户端的截图:

  • 服务器的截图:

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
,