TCP通信原理*

简单TCP通信过程

发送端:

package com.simple_tcp;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;/*Socket和ServerSocket*       建立客户端服务器端 socket*       建立连接后,通过Socket中的IO流进行数据的传输*       关闭socket*       同样,客服端与服务器就是两个独立的应用程序**       思路:*       1、建立客户端的socket服务,并明确要连接的服务器*       2、如果连接建立成功,就表明,已经建立了数据传输的通道*           就可以在该通道通过IO进行数据的读取和写入*       3、通过socket对象方法,可以获取这两个流*       4、通过流的对象可以对数据进行传输*       5、如果传输数据完毕,关闭资源**       Socket:此类实现客户端(发送端)套接字(也可以叫“套接字”)*           套接字就是两台机器间通信的端点**        DatagramSocket(int port , InetAddress laddr)*           创建数据报套接字,将其绑定到指定的本地(ip 与端口号所标识的Socket)地址**       在没写tcp接收端的情况下,启动发送端:*       报错java.net.ConnectException: Connection refused: connect*       */
public class TcpSenderDemo {public static void main(String[] args) {try (//1、建立客户端的socket服务,并明确要连接的服务器(指明要连接的目的端Socket)Socket socket = new Socket("192.168.3.76",6666);){//   Socket socket = new Socket("192.168.3.76",6666);//传输数据,从已经建立的连接中拿到流OutputStream out = socket.getOutputStream();out.write("hello,tcp!".getBytes());InputStream in = socket.getInputStream();byte[] buffer  = new byte[1024];int len = in.read(buffer);System.out.println("接收端收到反馈:" + new String(buffer , 0 ,len));} catch (IOException e) {e.printStackTrace();}}
}

接收端:

package com.simple_tcp;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;/*
*       1、建立服务器端的socket服务,需要一个接口
*       2、服务器没有直接流的操作,而是通过accept方法获取客户端对象,在通过获取到的客户端对象的流和客户端进行通信
*       3、通过客户端的获取流的对象的方法,读取数据或者写入数据
*       4、如果服务完成,需要关闭客户端,然后关闭服务器,但是,一般会关闭客户端,不会关闭服务器,因为服务器是一直提供服务的
*
*       ServerSocket:
*           此类实现服务器套接字。服务器套接字等待请求通过网络传入(等待别Socket连接请求)
*
*       ServerSocket(int port)
*           创建绑定到特定端口的服务器套接字
*
* java.net.SocketException: Connection reset
* 该异常在客户端和服务器端均有可能发生,引起该异常的原因有两个,
* 第一个就是如果一端的Socket被关闭(或主动关闭或者因为异常退出而引起的关闭),
* 另一端仍发送数据,发送的第一个数据包引发该异常(Connect reset by peer)。
* 另一个是一端退出,但退出时并未关闭该连接,另一端如果在从连接中读数据则抛出该
* 异常(Connection reset)。简单的说就是在连接断开后的读和写操作引起的。*
*
*
*
* 接下来:发送一个反馈给发送端。
*
* */
public class TcpReceiverDemo {public static void main(String[] args) {try (//释放资源,我们不需要做,以下语句会做// 1、建立服务器端的socket服务,需要一个接口ServerSocket serverSocket = new ServerSocket(6666);//   2、服务器没有直接流的操作,而是通过accept方法获取客户端soccket// 对象,在通过获到的客户端对象的流和客户端进行通信Socket connectionSecket = serverSocket.accept();){InputStream in = connectionSecket.getInputStream();OutputStream out = connectionSecket.getOutputStream();byte[] buffer = new byte[1024];int len = -1;while((len = in.read(buffer)) != -1){//String s = new String(buffer,0,len);out.write(s.getBytes());// System.out.println("from"+ connectionSecket.getInetAddress()+":" + new String( buffer ,0, len));}} catch (IOException e) {e.printStackTrace();}}}

网络编程学习笔记之TCP_01(帅帅老师讲堂)相关推荐

  1. java 网络编程学习笔记

    java 网络编程学习笔记 C/S模式:客户端和服务器 客户端创建流程 1 1.建立Socket端点 2 3 Socket s = new Socket(绑定地址, 绑定端口); 2.确认源数据方式和 ...

  2. [Linux网络编程学习笔记]索引

    一.Linux基本知识 [学习笔记]Linux平台的文件I/O操作 [学习笔记]Linux平台的文件,目录及操作 [Linux学习笔记]标准输入输出 [Linux学习笔记]进程概念及控制 [Linux ...

  3. 编程开发:Linux网络编程学习笔记

    非常全面.通俗易懂.值得借鉴的Linux网络编程学习笔记.关键字:linux linux编程 网络编程 linux网络编程 下载地址:点我下载 特别说明:本资源收集于网络,版权归原作者及版权商所有,仅 ...

  4. 15Java网络编程学习笔记

    Java网络编程学习笔记 文章目录 1 网络基础 1.1 网络通信 1.2 网络 1.3 IP地址 1.5 域名 1.6 端口号 1.7 网络通信协议 1.8 TCP协议 1.9 UDP协议 2 In ...

  5. python网络编程学习笔记(二)

    python网络编程学习(四) 多用途客户端协议 一.ftp 功能:上传下载文件,删除命名文件,建立删除目录,自动压缩,保存目录 1.代码: #coding=utf-8 '''连接远程ftp服务器,显 ...

  6. Linux网络编程学习笔记

    声明:1.未经过原作者许可,不可用于商业行为:2.本笔记仅用于知识学习,如有侵权,立即删除. 1.学习链接 黑马程序员-Linux网络编程:https://www.bilibili.com/video ...

  7. python网络编程需要学什么,python网络编程学习笔记(五):socket的一些补充 Python 网络编程需要学习哪些网络相关的知识...

    python的socket编程问题hdr = recvall(s, 5) if hdr is None: print 'Unexpected EOF receivingstruct在unpack的时候 ...

  8. Linux网络编程学习笔记(TCP)

    文章目录 1 字节序 1.1 定义 1.2 字节序转换函数 2 Socket地址 2.1 通用socket地址(实际开发不使用) 2.2 专用socket地址 2 IP地址转换 3 TCP通信流程 3 ...

  9. Linux 网络编程学习笔记

    前言: 本文是学习<Linux 高性能服务器编程(游双 著)>时所记录的重点知识. 一.TCP/IP 协议族 二.IP 协议详解 三.TCP 协议详解 四.HTTP 通信 五.Linux ...

  10. 网络编程学习笔记--1.socket可读可写条件

    欢迎转载,转载请注明原文地址:http://blog.csdn.net/majianfei1023/article/details/45788591 socket可读可写条件,经常做为面试题被问,因为 ...

最新文章

  1. 石正丽/周鹏团队发表冠状病毒新研究,进一步证明新冠非实验室泄漏
  2. python编程在哪里写程序-第一个Python程序——在屏幕上输出文本
  3. BASISI系统中如何配置web service
  4. Android之通过ContentResolver获取手机图片和视频的路径和生成缩略图和缩略图路径
  5. matlab sort对矩阵某一维进行排序并记录之前索引
  6. Python实现Adaboost
  7. 增广最小二乘法 matlab 东南大学,各种最小二乘法总结(算法+matlab源码)
  8. vue3vite工程里面引入assets目录下的图片文件(一种方法)
  9. No usable temporary directory found in [‘/tmp‘, ‘/var/tmp‘, ‘/usr/tmp‘]
  10. 单片机蓝牙模块与手机蓝牙通信(3)
  11. C什么k什么_K线基础——什么是MACD?
  12. 解决MySql保存数据java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x91\x87\xE5\x91...‘
  13. ios 制作方形头像
  14. 项目docker容器化部署步骤
  15. 13部成功预知未来科技的科幻电影
  16. 初识神经辐射场NeRF
  17. UML图之五——时序图
  18. Linux的LVM磁盘卷轴深度学习
  19. Linux ALSA音频驱动之一:框架概述
  20. oracle设行宽 每次,解决每次从cmd进入sqlplus,都得重新设置pagesize、linesize的问题...

热门文章

  1. unity 摄像头跟着鼠标移动_lwj_unity_模拟第一人称摄像机前后左右移动、摄像机随鼠标移动旋转、鼠标点击添加物体...
  2. 读书笔记《你真的理解什么是财富自由吗?》
  3. 目前能体验到的虚拟主播虚拟人脸形象有哪些?
  4. AI和数学领域的咖啡甜心(一):DeepFace基础
  5. Geeks 面试题:Fibonacci numbers 优化为lgn效率
  6. 无本经营?2021做电商跨境shopee平台赚钱很轻松!
  7. EXCEL批量删除行
  8. (全过程)如何制作论坛网站,怎样免费制作论坛,制作论坛教程
  9. 南大计算机学硕复试,2017年南京大学计算机科学与技术系考研复试名单
  10. 如何用用计算机名访问共享打印机,局域网怎么连接共享打印机共享