TCP通信

1、TCP概述

TCP(Transmission Control Protocol):传输控制协议,是一种面向连接的协议。

TCP不同于UDP,TCP严格区分客户端和服务器端,在通信时,必须先由客户端去连接服务器端才能实现通信,服务器端不可以去主动连接客服端,并且服务器端程序需要事先启动,等待客户端的连接。

在jdk中提供了两个类用于实现TCP程序,一个是ServerSocket类,用于表示服务器端,一个Socket类,用于表示客户端。

通信时,首先创建代表服务器端的ServerSocket对象,该对象相当于开启一个服务,并等待客户端的连接,然后创建代表客户端的Socket对象向服务器发送连接请求,服务器端相应请求,两者建立开始通信。

2、ServerSocket

ServerSocket类的构造方法:

ServerSocket(int port):创建绑定到特定端口的服务器套接字。

常用方法:

Socket accept():侦听并接受到此套接字的连接。

InetAddress getInetAddress():返回此服务器套接字的本地地址。

3、Socket

Socket类构造方法:

Socket(String host, int port):创建一个流套接字并将其连接到指定主机上的指定端口号。

Socket(InetAddress address, int port):创建一个流套接字并将其连接到指定IP地址的指定端口号。

常用方法:

  • int getPort():返回一个int类型对象,该对象是Socket对象与服务器端连接的端口号
  • InetAddress getLocalAddress():用于获取Socket对象绑定的本地IP地址,并将IP地址封装成InetAddress类型的对象返回。
  • void close():关闭Socket连接,结束本次通信。在关闭Socket之前,应将Socket相关的所有的输入/输出流全部关闭。
  • InputStream getInputStream():返回一个InputStream类型的输入流对象,如果该对象是由服务器端的Socket返回,就用于读取客户端发送的数据,反之,用于读取服务器端发送的数据。
  • OutputStream getOutputStream():返回一个OutputStream类型的输出流对象,如果该对象有服务器端的Socket返回,就用于向客户端发送数据,反之,用于向服务器端发送数据。

4、TCP网络程序

服务器端

 1 package tcp;
 2 
 3 import java.io.IOException;
 4 import java.io.OutputStream;
 5 import java.net.ServerSocket;
 6 import java.net.Socket;
 7 
 8 /**
 9  * <p>Description:TCP通信服务器端 </p>
10  * @author Administrator
11  * @date 2018年11月6日下午4:06:33
12  */
13 public class TCPServer {
14 
15     public static void main(String[] args) throws IOException {
16         // 创建服务器ServerSocket对象(指定服务器端口号)
17         ServerSocket ss = new ServerSocket(8888);
18         // 开启服务器了,等待客户端连接,连接后可以获取服务器端的客户端Socket对象
19         Socket s = ss.accept();
20         // 获取客户端的输出流
21         OutputStream os = s.getOutputStream();
22         // 在服务器端,通过客户端的输出流写数据给客户端
23         os.write("连接服务器成功".getBytes());
24         // 关闭资源
25         os.close();
26     }
27 
28 }

客户端

 1 package tcp;
 2 
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.net.Socket;
 6 import java.net.UnknownHostException;
 7 
 8 /**
 9  * <p>Description:TCP通信客户端 </p>
10  * @author Administrator
11  * @date 2018年11月6日下午4:14:21
12  */
13 public class TCPClient {
14 
15     public static void main(String[] args) throws UnknownHostException, IOException {
16         // 创建客户端Socket对象(要指定连接服务器地址与端口号)
17         Socket s = new Socket("192.168.247.1", 8888);
18         // 获取服务器端反馈回来的信息
19         InputStream is = s.getInputStream();
20         // 获取流中的数据
21         byte[] buffer = new byte[1024];
22         // 把流中的数据存储到数组中,并记录读取字节的个数
23         int length = is.read(buffer);
24         // 显示数据
25         System.out.println(new String(buffer, 0, length));
26         // 关闭资源
27         is.close();
28         s.close();
29     }
30 
31 }

 

posted @ 2018-11-06 16:23  AlphaJunS  阅读(471)  评论(0编辑  收藏  举报