Day18 TCP

TCP

服务器:(ServerSocket)
    步骤:1.创建服务器
        ServerSocket   server=new  ServerSocket(8989);
        2.等待链接(链接成功)获得套接字
        Socket   socket=server.accept();
        3.IO通信,接受消息
        BufferedReader bufferedInputStream=new  BufferedReader(new InputStreamReader(socket.getInputStream(),"utf-8"));
        4.关闭链接
        socket.close();
        server.close();
客户端:(Socket)
    步骤:1.创建套接字,并请求服务器
        Socket   client=new Socket("127.0.0.1", 8989);// host服务器地址,port 端口
        2.IO通信,发送消息
        BufferedWriter  bufferedWriter=new  BufferedWriter(new  OutputStreamWriter(client.getOutputStream(),"utf-8"));

        3.关闭链接
        client.close();
OSI七层模型
    应用层:应用程序之间的数据交换
表示层:协商数据交换的格式
会话层:客户端的应用程序提供了,打开和关闭以及会话管理的机制
传输层:提供计算机之间进行通信会话,并确保数据的可靠传输
网络层:提供所谓所谓地址链接服务,这些链接协议可处理地址信息和路由器信息,如果发错错误要求重新传送.
数据链路层:网卡地址,同一份配.
物理层:物理介子,二进制流传输
三次握手:(AB主机)
    第一次握手:A主机要求建立链接
     第二次握手:B主机收请求,然后确认联机信息
     第三次握手:A主机收到数据包,检查是否正确,如果正确建立链接
UDP通信
 不面向连接,不可靠的协议 快速发送
发送端:
(1)    创建发送地址
InetAddress   inetAddress=InetAddress.getByName("localhost");
(2)    创建数据包
byte  []   datas="欢迎来到英雄联盟".getBytes();
//数据包                                    数据    发送地址    对方的端口号
DatagramPacket   packet=new DatagramPacket(datas, 0, datas.length, inetAddress, 8848);
(3)    创建套接字设置自己端口号
int  port=8989;
DatagramSocket   datagramSocket=new DatagramSocket(port);
(4)    利用套接字发送数据包
datagramSocket.send(packet);
(5)    释放资源
datagramSocket.close();
接收端:
(1)    创建数据包
DatagramPacket  datagramPacket=new  DatagramPacket(datas, datas.length);
(2)    创建套接字设置自己的端口号
DatagramSocket    datagramSocket=new  DatagramSocket(8848);
(3)    用套接字获得数据包
datagramSocket.receive(datagramPacket);
//数据打印
System.out.println(new  String(datas).trim());
(4)    释放资源
datagramSocket.close();
Arrays(包含用于操作数组的各种方法)
List<T>    asList(T... a)        返回由指定数组支持的固定大小的列表
byte[]    copyOf(byte[] original, int newLength)    复制指定的数组,用零截取或填充,以便复制具有指定的长度
byte[]    copyOfRange(byte[] original, int from, int to)    将指定数组的指定范围复制到新数组中
void        fill(int[] a, int fromIndex, int toIndex, int val)        将指定的int值分配给指定的int数组的指定范围的每个元素
void        parallelSort(byte[] a)    按照数字顺序排列指定的数组
void        sort(byte[] a, int fromIndex, int toIndex)    按升序排列数组的指定范围
String    toString()            返回指定数组的内容的字符串表示形式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TCP和UDP是互联网传输层的两种不同的通信协议。它们使用不同的端口号来进行通信。TCP和UDP的端口号并不一样。TCP端口号被用于建立可靠的连接,而UDP端口号用于无连接的通信。具体的端口号可以根据具体的协议和服务来确定。可以查阅端口列表链接来获取TCP和UDP协议中常用的端口号。 举个例子,22号端口用于SSH服务,它用于建立通过网络登录远程计算机的安全连接。 当进行TCP数据包分析时,需要注意不要混淆客户端端口和服务器端口。客户端端口是递增的,通常从1024开始,到4096时再次循环。如果你要调查的端口号在这个范围的较低部分,那么它可能是一个客户端端口。有状态的防火墙可以识别服务器端口,但数据包嗅探器和无状态的防火墙则不行。要确定一个TCP数据包的具体协议和服务,需要检查初始的TCP握手过程。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [tcp/udp 常用端口列表](https://blog.csdn.net/whatday/article/details/106235441)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [常用网络端口号](https://blog.csdn.net/u011308691/article/details/16357477)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值