python网络编程 - tcp

Posted good good study, day day up !

tags:

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

网络编程

低级别的网络服务

高级别的网络服务

socket又称“套接字”,应用程序通过“套接字”向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。 

 

python代码实现 

服务端

流程

1、socket创建一个套接字
2、bind绑定ip和port
3、listen 使套接字变为可以被动链接(默认创建的套接字是主动去链接别人的)
4、accept 等待客户端的链接(accept和客户端的connect是一对,服务器的accept只响应客户端的connect)
5、send/recv 发送和接收数据(recv和send是一夫多妻,服务器的recv响应客户端的send,也响应客户端socket的close;反之亦然)。有一个好玩的事情,当某一端send空数据的时候,另一端recv并没有响应,而当close的时候,recv却是能响应的,不过数据为空,猜测是send不能发送空数据
 

代码

import socket
import sys


# 创建socket对象
# family:套接字家族,AF_UNIX或者AF_INET(默认)
# type:套接字类型,面向连接的还是面向非连接的,SOCK_STREAM(默认)或者SOCK_DGRAM
# protocol:一般不填默认为0
socket_obj = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

#获取本地主机名,或者使用ip
host = socket.gethostname()
port = 9999

# 重用ip和端口,防止报“Address already in user” 的错误
sobj.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

#绑定端口,参数是一个元组
socket_obj.bind((host,port))

#设置最大连接数,超过后排队
socket_obj.listen(5)
 
while True:
    #创建客户端连接
    clientsocket,addr = socket_obj.accept()
    print(连接地址:%s%str(addr))

    clientsocket.send("hello".encode(utf-8))
    clientsocket.close()

 

 

客户端

import socket
import sys
 

#创建socket对象
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

#获取本地主机名
host = socket.gethostname()

#设置端口号
port = 9999

#连接服务,指定主机和端口
s.connect((host,port))

#接收小于1024字节的数据
msg = s.recv(1024)
 
s.close()

print(msg.decode(utf-8))

 

 

以上是关于python网络编程 - tcp的主要内容,如果未能解决你的问题,请参考以下文章

Python网络编程TCP服务器端问题,如图,为啥没报错也没输出?代码哪里有问题,求大神

Python—网络编程之tcp编程

Python TCP 协议网络编程《四》

python网络编程 - tcp

Python核心编程(网络编程)

python网络编程,通过服务名称和会话类型(tcp,udp)获取端口号,简单的异常处理