Python 中的TCP socket 写法

Posted gaby-yan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 中的TCP socket 写法相关的知识,希望对你有一定的参考价值。

一、 服务器server的写法:

  1. 创建 socket 套接字:网络编程接口 socket(family = AF_INET , type = SOCKET_STREM,proto = 0, fileno = None)   提供了多种socket family。AF_INET 是默认的family,需要绑定IP和端口。 127.0.0.1是一个特殊的IP地址,表示本机地址。如果绑定到这个地址,客户端必须同时在本机运行才能连接,也就是说,外部的计算机无法连接进来。

  不同的协议family使用的地址形式不同,通常来说我们使用的是AF_INET-----地址是以(IP,PORT)形式存。在type 类型,我们常用的有两种 SOCKET_STREM ,流式套接字,表示基于连接的TCP套接字,SOCKET_DGRAM, 数据报套接字,基于无连接的(UDP)接口。 如果不设定,默认就是 SOCKET_STREM 。

  2. bind 绑定      使用方法:socket.bind(address)  把套接字绑定在 address 上,address的形式 根据 family 来设定。不管是client还是server,创建socket的时候都是通过一个本地的文件来进行的。  

  3. listen 监听       使用方法:socket.listen([backlog])  使能 socket 接收连接请求,listen(self,backlog = None) ,backlog需要大于0,指定了可以缓存的连接请求的数量。

  4. accept 接受请求连接 在等待一个即将来临的连接,会返回一个代表连接的新的socket,还会返回一个地址(host和port),可以用两个东西接收,前一个代表新的socket,后一个就是接收地址。

写的方法:connet_socket,client_addr = srv.accept() connet_socket就是新的socket,然后connet_socket开始接下来的传输。connet_socket,client_addr,前者表示接收的新的socket,后者就是地址,具体看程序第10行。

  5. 接收数据  使用方法:socket.recv(bufsize[,flags])  从 socket 中接收数据,返回的是 bytes ,是接收到的内容。bufsize指定了一次最多接收多少个数据,如果没有数据接收,程序会阻塞,一直到有数据或者远程终端断开连接.

  6. 发送数据  使用方法:socket.send(bytes[, flags])  你的socket必须和远程的socket建立了联系,返回值是发送的数量,可以判断你的数据是否发送完毕,如果没有,继续send余下来的数据

 1 import socket
 2 hostname = 127.0.0.1          #设置主机名
 3 port = 6666                     #设置端口号   要确保这个端口号没有被使用,可以在cmd里面查看
 4 addr = (hostname,port)
 5 srv = socket.socket()           #创建一个socket
 6 srv.bind(addr)
 7 srv.listen(5)
 8 print("waitting connect")
 9 while True:
10     connect_socket,client_addr = srv.accept()
11     print(client_addr)
12     recevent = connect_socket.recv(1024)
13     print(str(recevent,encoding=gbk))
14     connect_socket.send.send(bytes("你好,数据传输完成,这里是gaby-yan--server",encoding=gbk))
15     connect_socket.close()

二、 客户端client的写法:

  客户端的写法相对比较简单,只有1.创建socket  2. 建立连接 connect  3. 发送 send  4. 接收recv  

  这是由于他们的传递编程框架不同造成的,如图。

 

 技术分享图片

 

 

 

 

 

 

 

 

 

 

 

 1 import socket
 2 hostname = 127.0.0.1
 3 port = 7777
 4 addr = (hostname,port)
 5 
 6 clientsock = socket.socket()      ## 创建一个socket
 7 clientsock.connect(addr)            # 建立连接
 8 
 9 say = input("输入你想传送的消息:")
10 clientsock.send(bytes(say,encoding=gbk))         #发送消息
11 recvdata = clientsock.recv(1024)                    #接收消息   recvdata 是bytes形式的
12 print(str(recvdata,encoding=gbk))                # 我们看不懂bytes,所以转化为 str
13 clientsock.close()

注意:先运行server的代码,再运行client的代码。

 

以上是关于Python 中的TCP socket 写法的主要内容,如果未能解决你的问题,请参考以下文章

python中的TCP及UDP

TCP和UDP基本写法

Python 中的网络编程-socket模块创建TCP服务器创建TCP客户端

python中的socket

python的socket的tcp协议编程

python socket编程tcp/udp俩连接