TCP协议实现简单的通信
## TCP协议:
是一种面向连接的保证可靠的传输协议,通过TCP协议传输,得到的是一个顺序的无差错的数据流。
发送方和接收方的成对的建立连接。必须通了之后才能传输数据。可以双向传输数据
*端口:
** 我们这里所说的端口,不是计算机硬件的I/O端口,而是软件形式上的概念。
根据提供服务类型的不同,端口分为两种,一种是TCP端口,一种是UDP端口。
计算机之间相互通信的时候,分为两种方式:一种是发送信息以后,可以确认信息是否到达,
也就是有应答的方式,这种方式大多采用TCP协议;一种是发送以后就不管了,不去确认信息是否到达,
这种方式大多采用UDP协议。对应这两种协议的服务提供的端口,也就分为TCP端口和UDP端口。
*第一步:**创建客户端方:Client.java
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
/**
* TCP 通信 客户端发送消息
*
*/
public class Client {
public static void main(String[] args) throws IOException {
Cilent demo = new Cilent();
demo.test();
}
private void test() throws IOException {
// 获取本机地址,用作发消息的对象。
InetAddress address = InetAddress.getLocalHost();
String ip = address.getHostAddress();
//自定义端口,用于发送消息
int port = 10086;
Socket socket = new Socket(ip, port);
OutputStream outputStream = socket.getOutputStream();
String s = "A:小梅,你最近还好吗?";
outputStream.write(s.getBytes());
System.out.println("-------------------");
InputStream inputStream = socket.getInputStream();
//创建输出流,将服务器传送回来的消息保存到硬盘
FileOutputStream fileOutputStream = new FileOutputStream("D:" + File.separator + "tcp.txt", true);
byte[] b = new byte[1024 * 1];
int len = inputStream.read(b);
fileOutputStream.write(b, 0, len);
fileOutputStream.flush();
String message = new String(b, 0, len);
System.out.println("收到回信:" + message);
inputStream.close();
fileOutputStream.close();
outputStream.close();
socket.close();
}
}
*第二步:**创建服务器方:Server.java
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* TCP 通信 服务器端,接收消息
*
*/
public class Server {
public static void main(String[] args) throws IOException {
Server demo=new Server();
demo.test();
}
private void test() throws IOException {
int port = 10086;
ServerSocket serverSocket = new ServerSocket(port);
Socket accept = serverSocket.accept();
InputStream inputStream = accept.getInputStream();
//创建输出流,将收到的信息保存到硬盘中
FileOutputStream fileOutputStream = new FileOutputStream("D:" + File.separator + "tcp.txt",true);
byte[] b = new byte[1024 * 1];
int len = 0;
len = inputStream.read(b);
fileOutputStream.write(b, 0, len);
fileOutputStream.flush();
String s = new String(b, 0, len);
System.out.println("收到消息:" +s);
String ip = accept.getInetAddress().getHostAddress();
System.out.println("消息来自:" + ip);
OutputStream outputStream = accept.getOutputStream();
outputStream.write("B:我很好,你呢?".getBytes());
outputStream.close();
inputStream.close();
serverSocket.close();
fileOutputStream.close();
}
}
运行结果:
在服务器端,接收到客户端发送过来的信息。
在客户端收到服务器发送回来消息
将消息读写到硬盘中
注意:TCP也是先运行服务器端 Server,再运行客户端 Client.防止消息传送过来时,没有对象接收。