Socket关键字

Socket (套接字)是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:

它能实现不同主机间的进程通信,我们网络上各种各样的都是基于socket完成通信的,例如每天浏览网页,QQ聊天等。

Socket在不同语言间流程用法是一样的

套接字使用流程与文件使用流程类似:

1.创建套接字

2.使用套接字收发数据

3.关闭套接字

UDP发送数据

1.创建套接字

socket.socket(IP协议,udp模式)

2.使用套接字发送数据

socket.sendto (发送的内容(字节形式),(目的IP地址,端口)

3.关闭套接字

socket.close()

UDP接收数据:

进程要有个固定端口要接收数据,用bind绑定,绑定必须是自己电脑的IP和Port

from socket import *
#创建套接字
udp_socket=socket(AF_INET,SOCK_DGRAM)
#绑定本地相关信息,如果一个网络程序不绑定,系统会随机分配
local_addr=('',7788)
udp_socket.bind(local_addr)
#等待接收对方发送的数据
recv_data=udp_socket.recvfrom(1024)# 1024表示本次接收的最大字节数
#显示接收到的数据
print(recv_data[0].decode('gbk')
#关闭套接字
udp_socket.close()

 同一个端口同一时间内不容许使用两次

发送方可以不用绑定端口,接收方必须要绑定端口

TCP网络编程严格区分客户端和网络端

TCP客户端:

#创建TCP套接字
tcp_socket=socket(AF_INFT,SOCK_STREAM)

#链接服务器
ip=input("IP地址:”)

port=intin(put("port:"))
tcp_socket.connect((ip,port))
#发送数据或接受数据,tcp用send
send_data=input("请输入要发送的数据:")
tcp_socket.send(send_data.encode("gbk")
recvdata=tcp_socket.recv(1024)
print("接收到的数据”, recvdata.decode('gbk'))


#关闭套接字
tcp_socket.close()

想要完成TCP服务器功能,需要流程如下:

1.socket创建一个套接字

2.bind绑定ip和port,服务端要有固定ip和port

3.listen使套接字变为被动链接,会阻塞,当客户端connect时会调用accept方法

前面是监听套接字,负责等待有新的客户端进行连接

4.accept等待客户端的链接

accept产生新的套接字用来为客户端服务

5.recv/send接受发送数据

6.关闭套接字

监听套接字和新产生的套接字都要关

如果作为一个服务器,在调用socket()、bind()之后就会调用listen()来监听这个socket,如果客户端这时调用connect()发出连接请求,服务器端就会接收到这个请求,然后调用accept接收到这个请求,这个时候连接已建立。

 

posted @ 2020-09-05 19:52  小龙虾爱大龙虾  阅读(415)  评论(0)    收藏  举报