创建TCP套接字
import socket
# 创建tcp套接字 socket.SOCK_STREAM TCP socket.SOCK_DGRAM UDP
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 关闭套接字
s.close()
创建UDP 套接字
import socket
# 创建tcp套接字 socket.SOCK_STREAM TCP socket.SOCK_DGRAM UDP
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 关闭套接字
s.close()
UDP 发送数据
Servers 端
import socket
# 创建tcp套接字
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 准备接收方地址
dest_addr =('192.168.199.101',8080)
# 绑定本地信息 ip一般不写,表示本机的任何一个地址
local_addr = ('', 8888)
s.bind(local_addr)
send_date = input("请输入数据")
s.sendto(send_date.encode('utf-8'),dest_addr)
# 关闭套接字
s.close()
Cllient
# -*- coding: UTF-8 -*-
from socket import *
def main():
# 创建套接字
s = socket(AF_INET, SOCK_DGRAM)
# 绑定本地信息 ip一般不写,表示本机的任何一个地址
local_addr = ('', 8888)
s.bind(local_addr)
# 等待接收方发送数据 recvfrom 没有数据时会阻塞
recv_data = s.recvfrom(1024) # 1024表示本次接收的最大字节数
# 显示接收到数据
print(recv_data) # (b'数据', ('127.0.0.1 发送方IP', 8080 端口))
# windows 接收数据使用 gbk解码 Linu下 使用发送方格式解码
print(recv_data[0].decode("gbk"))
# 关闭套接字
s.close()
if __name__ == '__main__':
main()
Tcp socket
Clinet
# -*- coding: UTF-8 -*-
from socket import *
def main():
# 创建套接字
tcp_cli_socket = socket(AF_INET, SOCK_STREAM)
# 绑定本地信息
server_ip = ('127.0.0.1', 8888)
# 连接服务器
tcp_cli_socket.connect(server_ip)
# 发送数据
send_data = input("请输入要发送的数据:")
tcp_cli_socket.send(send_data.encode("gbk"))
# 接收数据
rescv_data = tcp_cli_socket.recv(1024)
print(rescv_data.decode('gbk'))
tcp_cli_socket.close()
if __name__ == '__main__':
main()
Tcp service
# _*_encoding:utf-8 _*_
from socket import *
# tcp 服务器 流程 1. 创建socket 2.bind 绑定ip和端口 3. listen 使套接字变为被动链接
# 4.accept 等待客户端接入 5.recv/send 接收发送数据
def main():
# 创建套接字
tcp_ser_socket = socket(AF_INET, SOCK_STREAM)
# 本地信息
local_addr = ("", 8808)
# 绑定
tcp_ser_socket.bind(local_addr)
# 使用socket的套接字默认属性是主动的, 使用listen将其变为被动的, 这样就可以接收别人的连接
tcp_ser_socket.listen(1024)
# 如果新的客户端来链接服务器 ,那么就产生一个新的套接字,专门为这个用户服务
# client_socket 某个客户端服务
client_socket, clientAddr = tcp_ser_socket.accept()
print("---------------")
print("client_socket:{} \n clientAddr:{}".format(client_socket, clientAddr))
print("***************")
# 接收对方发送的数据
recv_data = client_socket.recv(1024)
print("接收到数据:", recv_data.decode('gbk'))
# 发送给客户端数据
client_socket.send("test from server".encode('gbk'))
# 关闭为这个客户端分配的套接字
client_socket.close()
tcp_ser_socket.close()
if __name__ == '__main__':
main()
循环 为客户端服务
# _*_encoding:utf-8 _*_
from socket import *
# tcp 服务器 流程 1. 创建socket 2.bind 绑定ip和端口 3. listen 使套接字变为被动链接
# 4.accept 等待客户端接入 5.recv/send 接收发送数据
def main():
# 创建套接字
tcp_ser_socket = socket(AF_INET, SOCK_STREAM)
# 本地信息
local_addr = ("", 8808)
# 绑定
tcp_ser_socket.bind(local_addr)
# 使用socket的套接字默认属性是主动的, 使用listen将其变为被动的, 这样就可以接收别人的连接
tcp_ser_socket.listen(1024)
while True:
# 如果新的客户端来链接服务器 ,那么就产生一个新的套接字,专门为这个用户服务
# client_socket 某个客户端服务
client_socket, clientAddr = tcp_ser_socket.accept()
print("---------------")
print("client_socket:{} \n clientAddr:{}".format(client_socket, clientAddr))
print("***************")
while True: # 为同一个客户端服务多次
# 接收对方发送的数据
recv_data = client_socket.recv(1024)
print("接收到数据:", recv_data.decode('gbk'))
if recv_data:
# 发送给客户端数据
client_socket.send("test from server".encode('gbk'))
else:
# 关闭为这个客户端分配的套接字
break
client_socket.close()
print("---over---")
tcp_ser_socket.close()
if __name__ == '__main__':
main()
import socket
import threading
def recv_data(udp_socket):
while True:
data = udp_socket.recvfrom(1024)[0].decode('gbk')
print("\n接收数据:" + data)
def send_data(udp_socket):
while True:
s_data = input("请输入要发送的数据")
udp_socket.sendto(s_data.encode('gbk'),("127.0.0.1",7890))
def main():
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_socket.bind(("", 7788))
resv_thread = threading.Thread(target=recv_data, args=(udp_socket,))
send_thread = threading.Thread(target=send_data, args=(udp_socket,))
send_thread.start()
resv_thread.start()
if __name__ == '__main__':
main()