标签:new 机制 recvfrom pytho [1] == 信息 数据传输 lin
A类:网络号7位 |
主机号21位
|
B类:网络号14位
|
主机号:14位
|
c类:网络号21位
|
主机号7位
|
D类地址是用来多播的 |
|
E类是用来保留的
|
|
192.168.1.1~255 常见的c类
|
发送方
|
接收方
|
目的ip
|
|
源ip |
|
目标端口 |
|
源端口
|
|
内容
|
|
#!usr/bin/env python #-*- coding:utf-8 _*- import socket def main(): #1.创建tcp套接字 tcp_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #连接服务器 server_ip=input("请输入要连接的服务器ip") server_port=input("请输入要连接的的服务器的port") server_addr=input(server_ip,server_port) tcp_socket.connect(server_addr) #发送,接收数据 send_data=input("请输入要发送的数据") tcp_socket.send(send_data.encode("gbk")) #关闭套接字 tcp_socket.close() if __name__=="__main__": main()
tcp服务器端
#!usr/bin/env python #-*- coding:utf-8 _*- ‘‘‘ tcp服务器 1.socket创建一个套接字 2.bind绑定ip和port 3.listen使套接字可以变为被动连接 4.accept等待客户端的连接 5.recv/send接收发送的数据 ‘‘‘ import socket def main(): tcp_server=socket.socket(socket.AF_INET,socket.SOCK_STREAM) tcp_server.bind("",3630)#这里绑定本地任何一个IP都行 tcp_server.listen(128)#这个值一般写128就行了 new_client,clinet_addr=tcp_server.accept()#accept他有一个返回值,左边有两个变量,这叫做拆包,后面的元组中有多少个变量 # 更好的利用元组的返回值,直接就拆包就行l # 监听套接字等待有新的客户端进行连接 # accept产生的新的套接字用来为客户端服务 print(clinet_addr) # 接收客户端发送过来的请求 recv_data=new_client.recv(1024) print(recv_data) # 回送一部分数据给客户端 new_client.send("hahaha".encode("gbk")) # 关闭套接字 new_client.close() tcp_server.close() #记住哦,以后先写这个 if __name__ == "__main__": main()
udp_socket
#!usr/bin/env python #-*- coding:utf-8 _*- import socket def main(): #1.创建一个udp套接字 udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #绑定本地信息,若没有绑定 udp_socket.bind("",7891) # 循环发送数据 while True: # 2.可以使用套接字收发数据 # 从键盘获取数据 send_data=input("please input") if send_data=="exit": break # udp_socket.sendto(b"hahahahah",("192.168.1.104",7788))#后面是一个元祖 # 若后面直接是一个字符串,就可以直接加上一个b udp_socket.sendto(send_data.encode("utf-8"),("192.168.33.1",8080)) #3.关闭套接字 udp_socket.close() if __name__=="__main__": main()
udp聊天器
#!usr/bin/env python #-*- coding:utf-8 _*- # 使用同一个套接字,获取收发的数据 import socket def main(): udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) dest_id=input("对方id") dest_port=int(input("对方端口")) send_data = input("please input") udp_socket.sendto(send_data.encode("utf-8"),(dest_id,dest_port)) # 套接字是可以同时收发数据的 #接收回送过来的数据 recv_data=udp_socket.recvfrom(1024) print(recv_data) udp_socket.close() if __name__ == ‘__main__‘: main()
#!usr/bin/env python
#-*- coding:utf-8 _*-
# 同一时刻只能单方面发送信息
# 半双工,对讲机
# 全双工:同一时刻可以双方同时
# socket属于全双工
# udp他不是很稳定,不能保证数据能够获取到,对方手收到数据,他不会告诉你,但是tcp收到了数据会告诉你
# tcp:他会比udp更加稳定一些
# tcp会有一个应答响应机制
‘‘‘
tcp与udp的不同点
面向连接
重发丢失的数据
无差错的数据传输
阻塞&流量控制:避免主机发送过快而导致来不解接收
舍弃重读的数据包
超时重传
现在大部分的网络通讯都是tcp,保证类数据传输的额可靠性
‘‘‘
‘‘‘
tcp
严格区分客户端和服务器
服务器就是一个程序
客户端就是一个app
‘‘‘
接收数据
#!usr/bin/env python #-*- coding:utf-8 _*- # 接收和发送数据的格式很固定 import socket def main(): #1.创建套接字 udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #2.绑定一个本地信息 localaddr=("",7891)#必须绑定自己的的ip和port,同一个端口,同一时刻不允许被用两次 udp_socket.bind(localaddr) #3.接收数据 recv_data=udp_socket.recvfrom(1024) # recv_data这个变量中存储的是一个元组(接收道德数据,(发送发的ip,port)) recv_msg=recv_data[0] #存储接收的数据 send_addr=recv_data[1] #存储发送方的地址信息 #4.打印接收到的数据 print(recv_data) print("%s:%s"%(str(send_addr),recv_msg.decode("gbk"))) #5.关闭套接字 udp_socket.close() if __name__ == ‘__main__‘: main()
案例
#!usr/bin/env python #-*- coding:utf-8 _*- import socket def send_msg(self,a): ‘‘‘发送消息‘‘‘ # 1.发送 dest_id = input("please input id:") dest_port = int(input("please input port")) # 获取要发送的内容 send_data = input("please input content") a.sendto(send_data.encode("gbk"), (dest_id, dest_port)) def recv_msg(self,b): ‘‘‘接收消息‘‘‘ # 接收并显示 recv_data = b.recvfrom(1024) print("%s:%s " % str(recv_data[1], recv_data[0].decode("gbk"))) def main(): # 创建套接字 udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 绑定信息 udp_socket.bind("",7891 ) # 循环来处理 while True: print("-----xx聊天器----") print("1:发送信息") print("2.接收消息") print("0:退出系统") op=input("要输入的功能") if op==1: send_msg(udp_socket) elif op==2: recv_msg(udp_socket) elif op==0: break else: print("输入有误,重新输入。。") if __name__ == "__main__": main()
#!usr/bin/env python
#-*- coding:utf-8 _*-
‘‘‘
tcp服务器
1.socket创建一个套接字
2.bind绑定ip和port
3.listen使套接字可以变为被动连接
4.accept等待客户端的连接
5.recv/send接收发送的数据
‘‘‘
import socket
def main():
tcp_server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
tcp_server.bind("",3630)#这里绑定本地任何一个IP都行
tcp_server.listen(128)#这个值一般写128就行了
new_client,clinet_addr=tcp_server.accept()#accept他有一个返回值,左边有两个变量,这叫做拆包,后面的元组中有多少个变量
# 更好的利用元组的返回值,直接就拆包就行l
# 监听套接字等待有新的客户端进行连接
# accept产生的新的套接字用来为客户端服务
print(clinet_addr)
# 接收客户端发送过来的请求
recv_data=new_client.recv(1024)
print(recv_data)
# 回送一部分数据给客户端
new_client.send("hahaha".encode("gbk"))
# 关闭套接字
new_client.close()
tcp_server.close()
#记住哦,以后先写这个
if __name__ == "__main__":
main()
标签:new 机制 recvfrom pytho [1] == 信息 数据传输 lin
原文地址:https://www.cnblogs.com/gaowenxingxing/p/10013631.html