Java TCP协议通信超详细讲解

2023-05-16 0 2,766

目录

什么是tcp

Tcp通信有两个特点分别是面向连接,具有可靠性.

面向连接:指的是客户端与服务端之间的连接,在通信之前会有三次握手的机制来确保连接的可靠性.

可靠性:tcp在确保他的可靠性上做了许多的功夫,这个可靠性体现在下面两方面:

  • tcp有状态:tcp会精确的纪录哪些数据是发送了的,哪些是没有被发送的,他保证数据包是按序到达的,不允许存在半点差错
  • tcp是可以控制的:如果存在丢包或者网络不好的时候,会根据具体情况对数据包进行发送速度的控制或者对数据包进行重新发送.

如下图是实现服务器端与客户端通信的思路:

Java TCP协议通信超详细讲解

服务端

服务端用到的类是ServerSocket

Java TCP协议通信超详细讲解

ServerSocker类在他的api文档里面也说了他是实现服务器的一个类

了解一个类我们还是老样子先了解他的构造方法,我们看一下api文档

Java TCP协议通信超详细讲解

我们常用的构造方法是第一个ServerSocket()和第二个serverSocket(int port).接下来我们只讲这两个方法.

我们先来讲讲serverSocket()这个构造方法吧!

serverSocket()这个构造方法是创建一个没有绑定端口的对象,一般他和如下方法配套使用

Java TCP协议通信超详细讲解

用以上的方法可以绑定一个你指定的ip地址和端口号.

接下来我们再讲讲第二个常用的构造方法吧 !

ServerSocket(int port)这个构造函数创建的是一个绑定本机的一个自定义端口的一个ServerSocket对象.

如下面的例子

ServerSocket serverSocket = new ServerSocket(6666); //绑定端口号为6666的端口

ServerSocket常用的方法

Java TCP协议通信超详细讲解

accept()方法是一个监听器,是一个阻塞式,它要等有服务端来连接了才能进行下一步,如果没有客户端来连接就会一直等待下去,直到接收到连接才往下运行.这个方法返回的是一个Socket对象,有客户端来连接,就会产生一个Socket对象.这个Socket对象就负责与服务端进行通信

close方法是释放服务器所占用的资源,并且断开全部客户端的连接.

客户端

Socket类是实现客户端通信

接下来我们解析socket

我们就看常用的socket类的构造方法吧

第一个构造方法

Java TCP协议通信超详细讲解

是创建一个连接到的一个指定的ip地址以及指定的端口号的服务器的socket对象.如果你得到的一个Ip地址是一个字符串类型我们还可以使用另一个构造方法

Java TCP协议通信超详细讲解

这个构造方法同样的也是创建一个连接到的一个指定的ip地址以及指定的端口号的服务器的socket对象

我们来看看他的常用方法

Java TCP协议通信超详细讲解

我们这里着重讲的是getOutputStream()方法与getInputStream()

getOutputStream()返回的是一个OutputStream字节输出流对象,我们从这里可以知道我们可以发送数据给服务器/客户端。

getInputStream() 返回有的是InputStream字节输入流对象,我们可以通过这个对象接受服务器/客户端发来的消息。

服务端与客户端代码实现实例

服务端代码

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
 * 服务端
 * @author Administrator
*
*/
public class Server {
	public static void main(String[] args) {
		ServerSocket server = null;
		Socket socket = null;
		try {
			//准备服务器端用的通讯对象(套接字),指明端口号为8888
			server = new ServerSocket(8888);
			//到指定端口去阻塞监听,一旦有客户端请求发送过来,那么立即自动与客户端建立连接
			socket = server.accept();
			System.out.println(\"服务器端准备ok\");
			//我要发送到客户端的内容
			String msg = \"你好,我是服务器,这是我的第一次通讯,请问你收到了吗\";
			OutputStream os = socket.getOutputStream();//准备输出对象
			BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
			bw.write(msg);
			bw.newLine();
			bw.flush();
			//接收客户端发送的信息
			InputStream is = socket.getInputStream();
			BufferedReader br = new BufferedReader(new InputStreamReader(is));
			String reply = br.readLine();
			System.out.println(\"我是服务器,接收到信息:\"+reply);
			br.close();
			is.close();
			bw.close();
			os.close();
			socket.close();
			server.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

客户端代码

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
/**
 * 客户端
 * @author Administrator
*
*/
public class Client {
	public static void main(String[] args) {
		Socket socket = null;
		try {
			socket = new Socket(\"localhost\", 8888);
			System.out.println(\"客户端准备完成\");
			//客户端开始接受请求
			InputStream is = socket.getInputStream();
			BufferedReader br = new BufferedReader(new InputStreamReader(is));
			String msg = br.readLine();
			System.out.println(\"我是客户端,接收到信息:\"+msg);
			//客户端接收到服务器端的信息之后,需要反馈信息给服务器
       	 //客户端想要反馈给服务器端的信息 
			String reply = \"我是客户端,收到你的信息,这是我的反馈\";
			OutputStream os = socket.getOutputStream();//准备客户端的输出流
			BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
			bw.write(reply);
			bw.newLine();
			bw.flush();
			bw.close();
			os.close();
			br.close();
			is.close();
			socket.close();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
资源下载此资源下载价格为1小猪币,终身VIP免费,请先
由于本站资源来源于互联网,以研究交流为目的,所有仅供大家参考、学习,不存在任何商业目的与商业用途,如资源存在BUG以及其他任何问题,请自行解决,本站不提供技术服务! 由于资源为虚拟可复制性,下载后不予退积分和退款,谢谢您的支持!如遇到失效或错误的下载链接请联系客服QQ:442469558

:本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可, 转载请附上原文出处链接。
1、本站提供的源码不保证资源的完整性以及安全性,不附带任何技术服务!
2、本站提供的模板、软件工具等其他资源,均不包含技术服务,请大家谅解!
3、本站提供的资源仅供下载者参考学习,请勿用于任何商业用途,请24小时内删除!
4、如需商用,请购买正版,由于未及时购买正版发生的侵权行为,与本站无关。
5、本站部分资源存放于百度网盘或其他网盘中,请提前注册好百度网盘账号,下载安装百度网盘客户端或其他网盘客户端进行下载;
6、本站部分资源文件是经压缩后的,请下载后安装解压软件,推荐使用WinRAR和7-Zip解压软件。
7、如果本站提供的资源侵犯到了您的权益,请邮件联系: 442469558@qq.com 进行处理!

猪小侠源码-最新源码下载平台 Java教程 Java TCP协议通信超详细讲解 http://www.20zxx.cn/705268/xuexijiaocheng/javajc.html

猪小侠源码,优质资源分享网

常见问题
  • 本站所有资源版权均属于原作者所有,均只能用于参考学习,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,建议提前注册好百度网盘账号,使用百度网盘客户端下载
查看详情

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务