TCP通信
程序员文章站
2022-06-06 07:55:19
...
通信时,先由客户端发起通信,服务器端不能首先发起通信,但必须先开启,然后等待客户端的访问。
服务器端用ServerSocket类,客户端用Socket类。
ServerSocket的构造方法先略去,就是对端口号或IP地址进行声明,以及机器繁忙时同步用户的数量。
ServerSocket的常用方法
Socket accept() | 用于等待与客户端的连接,在客户端连接之前一直处于阻塞状态,如果有客户端连接就返回一个与之对应的Socket对象 |
InetAddress getInetAddress() | 返回一个InetAddress对象,对象中封装了ServerSocket绑定的IP地址 |
boolean isClosed() | 该方法用于判断ServerSocket对象是否为关闭状态,如果是关闭状态返回true,反之返回false |
void bind(Socket Address endpoint) | 将ServerSocket对象绑定到指定的IP地址和端口号,参数endpoint封装了IP地址和端口号 |
客户端程序用的Socket类
Socket类的构造方法用于对IP与端口进行初始化,略。
int getPort() | 返回Socket对象与服务器端连接的端口号 |
InetAddress getLocalAddress() | 获取Socket对象绑定的本地IP地址,并将IP地址封装成InetAddress类型的对象返回 |
void close() | 关闭Socket连接,结束本次通信,结束前关闭相关的所有的输入输出流,释放内存资源 |
InputStream getInputStream() | 如果该对象由服务器端的Socket返回,就用于读取客户端发送的数据,反之,用于读取服务器端发送的数据 |
OutputStream getOutputStream() | 该对象如果是由服务器端的Socket返回,就用于向客户端发送数据,反之,用于向服务器端发送数据 |
服务器端实现TCP协议的代码:
package net;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Net {
public static void main(String args[])throws Exception{
new TCPServer().listen();
}
}
/*
* 工作流程:
* 1.定义一个服务器常用端口
* 2.常见访问站点
* 3.Socket监听客户端的信息
* 4.从客户端接收访问请求
* 5.向服务器端发送数据
* 6.客户端监听关闭
*/
class TCPServer{
//服务器端使用的端口是固定的
private static final int PORT=7788;
//定义监听方法,接收抛出的异常
public void listen() throws Exception{
//创建货物集散站
ServerSocket serverSocket=new ServerSocket(PORT);
//创建接收数据的站点
Socket client=serverSocket.accept();
//获取客户端的输出流
OutputStream os=client.getOutputStream();
System.out.println("开始与客户端交互数据");
os.write(("服务器端欢迎你!").getBytes());
Thread.sleep(5000);
System.out.println("结束为客户端提供服务");
os.close();
client.close();
}
}
客户端实现TCP协议的代码
import java.io.InputStream;
import java.net.InetAddress;
import java.net.Socket;
public class Send {
public static void main(String args[])throws Exception{
//创建TCPClient对象,并调用connect()方法
new TCPClient().connect();
}
}
/*
* 1.定义访问的接口
* 2.创建套接字,用于连接服务器的
* 3.通过数据流接收发送过来的数据
*/
class TCPClient{
//
private static final int PORT=7788;
public void connect()throws Exception{
//创建一个Socket并连接到给出地址和端口号的计算机
//每次使用的可以是随机的
Socket client=new Socket(InetAddress.getLocalHost(),PORT);
//获取接收数据
InputStream is=client.getInputStream();
byte[] buf=new byte[1024];
int len=is.read(buf);
System.out.println(new String(buf,0,len) );
client.close();
}
}