欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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();
	}
}