IP地址:负责在网络上唯一定位的基础
-192.168.xxxx.xxxx:局域网ip
-127.0.0.1:本机地址
端口
-范围:0-655535
-知名端口:0-1023
使用端口时,切记不要占用系统占用的端口
UDP:非安全的不面向链接的传输
- 大小限制64kb
- 没有顺序
- 速度快
TCP:基于链接的通信
Socket编程:
-socket(套接字):是一个网路通信的端点,实现不同主机之间的通信
-分TCP/UDP两种不同的模式
import socket
def ServerFunc():
#socket.AF_INET : 使用IPV4
#socket.SOCK_DGRAM: 使用UDP链接
sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#绑定ip和port
#127.0.0.1:本机地址
#7800 :端口号
#地址是tuple类型(ip,port)
address=("127.0.0.1",7800)
sock.bind(address)
#接受对方消息
#recvfrom接收的是一个tuple元组,前一项表示数据,后一项表示地址
data,address=sock.recvfrom(500)
#数据默认是bytes,必须解码后才可以得到str
text=data.decode()
print("Server receve data: {0}".format(text))
rsp="I know"
data=rsp.encode()
sock.sendto(data,address)
if __name__ == '__main__':
print("Start serve............")
ServerFunc()
print("End serve................")
输出结果:
Start serve............
Server receve data: I am learing socket
End serve................
客户端实例:
import socket
def clientFunc():
sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
text="I am learing socket"
data=text.encode()
sock.sendto(data,("127.0.0.1",7800))
data,address=sock.recvfrom(500)
data=data.decode()
print(data)
if __name__ == '__main__':
clientFunc()
输出结果:
I know
服务器端需要用listen来监听
客户端需要connect建立连接
import socket
def TcpFunc():
#socket.AF_INET : 使用IPV4
#socket.SOCK_STREAM: 使用Tcp链接
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#绑定ip和port
#127.0.0.1:本机地址
#7800 :端口号
#地址是tuple类型(ip,port)
address=("127.0.0.1",7800)
sock.bind(address)
sock.listen()
while True:
skt,address=sock.accept()
msg=skt.recv(500)
msg=msg.decode()
rst="Received msg:{0} from {1}".format(msg,address)
print(rst)
skt.send(rst.encode())
skt.close()
if __name__ == '__main__':
TcpFunc()
import socket
def clientFunc():
address = ("127.0.0.1", 7800)
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect(address)
text="TCP Learing"
data=text.encode()
sock.send(data)
rst=sock.recv(500)
print(rst.decode())
sock.close()
if __name__ == '__main__':
clientFunc()