套接字

网络编程之TCP客户端开发和TCP服务端开发

我的未来我决定 提交于 2020-01-06 03:15:35
开发 TCP 客户端程序开发步骤 创建客户端套接字对象 和服务端套接字建立连接 发送数据 接收数据 关闭客户端套接字 import socket if __name__ == '__main__': # 创建tcp客户端套接字 # 1. AF_INET:表示ipv4 # 2. SOCK_STREAM: tcp传输协议 tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 和服务端应用程序建立连接 tcp_client_socket.connect(("192.168.131.62", 8080)) # 代码执行到此,说明连接建立成功 # 准备发送的数据 send_data = "你好服务端,我是客户端小黑!".encode("gbk") # 发送数据 tcp_client_socket.send(send_data) # 接收数据, 这次接收的数据最大字节数是1024 recv_data = tcp_client_socket.recv(1024) # 返回的直接是服务端程序发送的二进制数据 print(recv_data) # 对数据进行解码 recv_content = recv_data.decode("gbk") print("接收服务端的数据为:", recv_content) #

Socket 套接字

僤鯓⒐⒋嵵緔 提交于 2020-01-05 00:33:52
1.客户端 /** * 聊天室客户端 */ public class Client { /* * java.net.Socket 套接字 * Socket封装了TCP协议传输数据的细节,使得我们可以通过两条流的读写完成与远端计算 * 机的数据交互 */ private Socket socket; /** * 构造方法,用来初始化客户端 */ public Client() { try { /* * 实例化Socket的过程就是连接服务端的过程. * 参数1:服务端的IP地址 * 参数2:服务端程序打开的端口 * * 我们通过IP可以找到网络上的服务端所在计算机,通过端口可以找到该计算机上运行 * 的服务端应用程序从而建立连接. */ System.out.println("正在连接服务端..."); socket = new Socket("localhost",8088); System.out.println("已连接服务端!"); } catch (Exception e) { e.printStackTrace(); } } /** * 客户端开始工作的方法 */ public void start() { try { Scanner scanner = new Scanner(System.in); /* * Socket提供的方法: * OutputStream

Socket解析——用易于理解的方式讲解Socket技术

喜你入骨 提交于 2020-01-03 21:27:33
萌新也能看懂的Socket技术解析 引导 知识回顾: 三次握手: 四次握手 什么是Socket 是一个编程接口 是一个特殊的文件描述符 一个比喻 网络中如何进行通信 Socket如何通信 OSI模型 图解socket流程 引导 学习目的:为了理解web服务器的底层 本文只较为浅显的解析解释socket技术,不做深入了解 知识回顾: 三次握手: TCP建立连接时要传输三个数据包,俗称三次握手,可以形象的比喻为下面的对话: [ Shake 1 ] 套接字A:“你好,套接字B,我这里有数据要传送给你,建立连接吧。” [ Shake 2 ] 套接字B:“好的,我这边已准备就绪。” [ Shake 3 ] 套接字A:“谢谢你受理我的请求。 四次握手 四次握手:建立连接非常重要,它是数据正确传输的前提;断开连接同样重要,它让计算机释放不再使用的资源。如果连接不能正常断开,不仅会造成数据传输错误,还会导致套接字不能关闭,持续占用资源,如果并发量高,服务器压力堪忧。 断开连接需要四次握手,可以形象的比喻为下面的对话: [ Shake 1 ] 套接字A:“任务处理完毕,我希望断开连接。” [ Shake 2 ] 套接字B:“哦,是吗?请稍等,我准备一下。” 等待片刻后…… [ Shake 3 ] 套接字B:“我准备好了,可以断开连接了。” [ Shake 4 ] 套接字A:“好的,谢谢合作。”

python套接字解决tcp粘包问题

流过昼夜 提交于 2020-01-02 21:20:00
python套接字解决tcp粘包问题 目录 什么是粘包演示粘包现象 解决粘包 实际应用 什么是粘包 首先只有tcp有粘包现象,udp没有粘包 socket收发消息的原理 发送端可以是一K一K地发送数据,而接收端的应用程序可以两K两K地提走数据,当然也有可能一次提走3K或6K数据,或者一次只提走几个字节的数据,也就是说,应用程序所看到的数据是一个整体,或说是一个流(stream),一条消息有多少字节对应用程序是不可见的,因此TCP协议是面向流的协议,这也是容易出现粘包问题的原因。而UDP是面向消息的协议,每个UDP段都是一条消息,应用程序必须以消息为单位提取数据,不能一次提取任意字节的数据,这一点和TCP是很不同的。怎样定义消息呢?可以认为对方一次性write/send的数据为一个消息,需要明白的是当对方send一条信息的时候,无论底层怎样分段分片,TCP协议层会把构成整条消息的数据段排序完成后才呈现在内核缓冲区。 例如基于tcp的套接字客户端往服务端上传文件,发送时文件内容是按照一段一段的字节流发送的,在接收方看了,根本不知道该文件的字节流从何处开始,在何处结束 粘包问题的根源 所谓粘包问题主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的。 此外,发送方引起的粘包是由TCP协议本身造成的,TCP为提高传输效率

python网络编程基础

冷暖自知 提交于 2020-01-02 21:11:43
   Socket(套接字)始于Unix,即人们所说的BSD Unix。socket家族有两种:基于文件系统的和基于网络的。第一种是基于文件系统的,地址家族表示为:AF_UNIX(或AF_LOCAL);第二种是网络Socket,是基于网络的,地址家族表示为AF_INET(AF_INET6表示ipv6)。   在Python 2.5 中加入了一种 Linux 套接字的支持:AF_NETLINK(无连接[见下])套接字家族让用户代码与内核代码之间的 IPC 可以使用标准 BSD 套接字接口。Python 只支持 AF_UNIX,AF_NETLINK,和 AF_INET 家族。这里将介绍使用最广泛的一个:AF_INET。   根据套接字类型,可以分为面向连接的和无连接的。   面向连接的,在通讯之前需建立一条连接,这种通讯方式提供了顺序的,可靠的,不会重复的数据传输,而且也不会被加上数据边界。实现这种连接的主要协议就是传输控制协议(即 TCP),其对应的套接字类型为 SOCK_STREAM。套接字使用 Internet 协议(IP)来查找网络中的主机,即TCP/IP协议来支持面向连接套接字。   无连接的,无需建立连接就可以进行通讯。实现这种连接的主要协议就是用户数据报协议(即 UDP) ,指定套接字类型为 SOCK_DGRAM。套接字使用 Internet 协议来查找网络中的主机

python网络编程

馋奶兔 提交于 2020-01-02 21:11:26
此篇博文是《python核心编程》的第16章的笔记 主要介绍了基于套接字的这种低级别的协议的使用,由于是底层的所以在调bug神马会非常受用 客户、服务器的几个例子: 硬件形式的:打印机服务器、文件服务器 软件形式的:web服务器、数据库服务器、窗口服务器 关于银行出纳也是这样类似的客户服务器模型 关于套接字 套接字是网络通信最为底层的东西 套接字的两个分类分别是: AF_UNIX(用于本地)与AF_INET(用于网络) Python 只支持AF_UNIX,AF_NETLINK,和AF_INET 家族。由于我们只关心网络编程,所以在本 章的大部分时候,我们都只用AF_INET 地址和端口 如果把套接字比做电话的插口——即通讯的最底层结构,那主机与端口就像区号与电话号码的 一对组合。有了能打电话的硬件还不够,你还要知道你要打给谁,往哪打。 套接字的另外一种分类方式: 面向连接 实现这种连接的主要协议就是传输控制协议(即TCP)。要创建TCP 套接字就得在创建的时候, 指定套接字类型为SOCK_STREAM。TCP 套接字采用SOCK_STREAM 这个名字,表达了它做为流套接字的 特点。由于这些套接字使用Internet 协议(IP)来查找网络中的主机,这样形成的整个系统, 一般 会由这两个协议(TCP 和IP)来提及 ,即TCP/IP。 无连接

socket与http

南楼画角 提交于 2020-01-02 20:53:00
参考文档: http://blog.csdn.net/zeng622peng/article/details/5546384 1、TCP连接 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。 建立起一个TCP连接需要经过“三次握手”: 第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”(过程就不细写了,就是服务器和客户端交互,最终确定断开) 2、HTTP连接 HTTP协议即超文本传送协议

TCP/IP、Http、Socket的区别

若如初见. 提交于 2020-01-02 20:42:25
网络由下往上分为   物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。   通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层,   三者从本质上来说没有可比性,   socket则是对TCP/IP协议的封装和应用(程序员层面上)。   也可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,   而HTTP是应用层协议,主要解决如何包装数据。   关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:   “我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容。   如果想要使传输的数据有意义,则必须使用到应用层协议。   应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。   WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。”   而我们平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)。   通过Socket,我们才能使用TCP/IP协议。   实际上,Socket跟TCP/IP协议没有必然的联系。   Socket编程接口在设计的时候,就希望也能适应其他的网络协议。

TCP和Http和Socket區別

回眸只為那壹抹淺笑 提交于 2020-01-02 20:42:08
Today,A colleague ask me a question about the different between Webservice and Socket. i am also a little excursive. I search a good article and i think it can resolve my confuse. i share it in here. 相信不少初学手机联网开发的朋友都想知道Http与Socket连接究竟有什么区别,希望通过自己的浅显理解能对初学者有所帮助。 1、TCP连接 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。 建立起一个TCP连接需要经过“三次握手”: 第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态

网络通信学习

Deadly 提交于 2020-01-02 20:39:37
~当前用户的家目录 -r 是用来删除目录的 Ctrl + L 清屏 等于 clear命令 凡是木录 目录名后都跟上/ cd .. 切换到当前目录的上一级目录 cd . 原地踏步,切换到当前目录 cd ~切换到当前用户家目录 与 cd作用一样 cd~ == cd cp 文件路径 文件名 目的路径 mv 与cp用法一样但是只有一份文件 bit--8-->Byte--1024-->KB--1024-->MB-->.....c'd 选项 -p 再创建嵌套目录的时候使用 表示自动创建父目录(parents) -v 在cp中复制文件时使用 用来显示copy的路径 -i 在删除时提醒是否要删除 cat 文件名 直接显示全部内容 more 文件名 只显示一屏,余下的折叠起来显示已经显示的量 touch 创建已经存在的文件就可以更改文件的最后修改时间 重定向 把本应该输出在终端的结果输出到其它位置 (文件中) command > 文件名 每次都覆盖以前的内容 command >> 文件名 把内容追加到之前文件内容的后面 cat 多个文件名 >> 文件名 把多个文件的内容合并到一个文件中输出到终端上(>>后跟一个新文件名可以创建这个文件) 管道 command1 | command2 把command1的输出当作输入给command2 |-->管道连接符 history 显示历史命令 链接文件ln