网络编程学习笔记之TCP_01(帅帅老师讲堂)
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(帅帅老师讲堂)相关推荐
- java 网络编程学习笔记
java 网络编程学习笔记 C/S模式:客户端和服务器 客户端创建流程 1 1.建立Socket端点 2 3 Socket s = new Socket(绑定地址, 绑定端口); 2.确认源数据方式和 ...
- [Linux网络编程学习笔记]索引
一.Linux基本知识 [学习笔记]Linux平台的文件I/O操作 [学习笔记]Linux平台的文件,目录及操作 [Linux学习笔记]标准输入输出 [Linux学习笔记]进程概念及控制 [Linux ...
- 编程开发:Linux网络编程学习笔记
非常全面.通俗易懂.值得借鉴的Linux网络编程学习笔记.关键字:linux linux编程 网络编程 linux网络编程 下载地址:点我下载 特别说明:本资源收集于网络,版权归原作者及版权商所有,仅 ...
- 15Java网络编程学习笔记
Java网络编程学习笔记 文章目录 1 网络基础 1.1 网络通信 1.2 网络 1.3 IP地址 1.5 域名 1.6 端口号 1.7 网络通信协议 1.8 TCP协议 1.9 UDP协议 2 In ...
- python网络编程学习笔记(二)
python网络编程学习(四) 多用途客户端协议 一.ftp 功能:上传下载文件,删除命名文件,建立删除目录,自动压缩,保存目录 1.代码: #coding=utf-8 '''连接远程ftp服务器,显 ...
- Linux网络编程学习笔记
声明:1.未经过原作者许可,不可用于商业行为:2.本笔记仅用于知识学习,如有侵权,立即删除. 1.学习链接 黑马程序员-Linux网络编程:https://www.bilibili.com/video ...
- python网络编程需要学什么,python网络编程学习笔记(五):socket的一些补充 Python 网络编程需要学习哪些网络相关的知识...
python的socket编程问题hdr = recvall(s, 5) if hdr is None: print 'Unexpected EOF receivingstruct在unpack的时候 ...
- Linux网络编程学习笔记(TCP)
文章目录 1 字节序 1.1 定义 1.2 字节序转换函数 2 Socket地址 2.1 通用socket地址(实际开发不使用) 2.2 专用socket地址 2 IP地址转换 3 TCP通信流程 3 ...
- Linux 网络编程学习笔记
前言: 本文是学习<Linux 高性能服务器编程(游双 著)>时所记录的重点知识. 一.TCP/IP 协议族 二.IP 协议详解 三.TCP 协议详解 四.HTTP 通信 五.Linux ...
- 网络编程学习笔记--1.socket可读可写条件
欢迎转载,转载请注明原文地址:http://blog.csdn.net/majianfei1023/article/details/45788591 socket可读可写条件,经常做为面试题被问,因为 ...
最新文章
- 石正丽/周鹏团队发表冠状病毒新研究,进一步证明新冠非实验室泄漏
- python编程在哪里写程序-第一个Python程序——在屏幕上输出文本
- BASISI系统中如何配置web service
- Android之通过ContentResolver获取手机图片和视频的路径和生成缩略图和缩略图路径
- matlab sort对矩阵某一维进行排序并记录之前索引
- Python实现Adaboost
- 增广最小二乘法 matlab 东南大学,各种最小二乘法总结(算法+matlab源码)
- vue3vite工程里面引入assets目录下的图片文件(一种方法)
- No usable temporary directory found in [‘/tmp‘, ‘/var/tmp‘, ‘/usr/tmp‘]
- 单片机蓝牙模块与手机蓝牙通信(3)
- C什么k什么_K线基础——什么是MACD?
- 解决MySql保存数据java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x91\x87\xE5\x91...‘
- ios 制作方形头像
- 项目docker容器化部署步骤
- 13部成功预知未来科技的科幻电影
- 初识神经辐射场NeRF
- UML图之五——时序图
- Linux的LVM磁盘卷轴深度学习
- Linux ALSA音频驱动之一:框架概述
- oracle设行宽 每次,解决每次从cmd进入sqlplus,都得重新设置pagesize、linesize的问题...
热门文章
- unity 摄像头跟着鼠标移动_lwj_unity_模拟第一人称摄像机前后左右移动、摄像机随鼠标移动旋转、鼠标点击添加物体...
- 读书笔记《你真的理解什么是财富自由吗?》
- 目前能体验到的虚拟主播虚拟人脸形象有哪些?
- AI和数学领域的咖啡甜心(一):DeepFace基础
- Geeks 面试题:Fibonacci numbers 优化为lgn效率
- 无本经营?2021做电商跨境shopee平台赚钱很轻松!
- EXCEL批量删除行
- (全过程)如何制作论坛网站,怎样免费制作论坛,制作论坛教程
- 南大计算机学硕复试,2017年南京大学计算机科学与技术系考研复试名单
- 如何用用计算机名访问共享打印机,局域网怎么连接共享打印机共享