TCP
建立连接,形成传输数据的通道。
在连接中进行大数据量传输。
通过三次握手完成连接,是可靠协议。
必须建立连接,效率会稍低。
客户端
package com.test.net;
import java.io.OutputStream;
import java.net.Socket;
/*
* 演示tcp传输。
*
* 1、tcp分客户端和服务端。
* 2、客户端对应的对象是Socket。
* 服务端对应的对象时ServerSocket。
*
* 客户端
* 通过查阅scoket对象,发现在该对象建立时,就可以去连接指定主机。
* 因为tcp是面向连接的,所以在建立socket服务时,就要有服务端存在,并连接成功。在该通道进行数据的传输。
* */
//创建Socket服务。并指定要连接的主机和端口。
public class TCP_Client_DEMO {
public static void main(String[] args) throws Exception {
// 创建客户端的socket服务。指定目的主机和端口
Socket s = new Socket("localhost", 8888);
// 为了发送数据,应该获取socket流中的输出流。
OutputStream out = s.getOutputStream();
out.write("hello Server".getBytes());
s.close();
}
}
服务端
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
/*
* 需求:定义端点接收数据并打印在控制台上。
*
* 服务端:
* 1、建立服务端的socket服务。ServerSocket();
* 并监听一个端口。
* 2、获取连接过来的客户端对象。
* 通过ServerSocket的accept方法。没有连接就会等,所以这个方法阻塞式的。
* 3、客户端如果发过来数据,那么服务端要使用对应的客户端对象,并获取到客户端对象的兑取流来读取发过来的数据。
* 并打印在控制台。
* 4、关闭服务端。
* */
public class TCP_Server_Demo {
public static void main(String[] args) throws Exception {
// 建立服务端socket服务,并监听一个端口。
ServerSocket ss = new ServerSocket(8888);
// 通过accept方法获取连接过来的客户端对象。
Socket s = ss.accept();
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip + "...连接");
// 获取客户端发送过来的数据,那么要使用客户端对象的读取流来读取数据。
InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
System.out.println(new String(buf, 0, len));
s.close();// 关闭客户端
ss.close();
}
}