1.5 网络编程
1.5.1 TCP编程
- 创建Socket,绑定Socket到本地IP与端口。
- 开始监听连接。
- 进入循环,不断接收客户端的连接请求。
- 接收传来的数据,并发送给对方数据。
- 传输完毕后,关闭Socket。
import socket
import threading
import time
def dealClient(sock, addr):
print("Accept new connection from {0[0]}: {0[1]} ...".format(addr))
sock.send(b"Hello, I am server")
while True:
data = sock.recv(1024)
time.sleep(1)
if (not data) or data.decode("utf-8") == "exit":
break
print("-->> {}!".format(data.decode("utf-8")))
sock.send(("Loop_Msg: {}!".format(data.decode("utf-8"))).encode("utf-8"))
sock.close()
print("Connection from {0[0]}: {0[1]} closed.".format(addr))
if __name__ == "__main__":
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("localhost", 9999))
s.listen(5)
print("Waiting for connection ...")
while True:
sock, addr = s.accept()
t = threading.Thread(target=dealClient, kwargs={"sock": sock, "addr": addr})
t.start()
Waiting for connection ...
Exception in thread Thread-6:
Traceback (most recent call last):
File "D:\ProgramData\Anaconda3\envs\crawler\lib\threading.py", line 917, in _bootstrap_inner
self.run()
File "D:\ProgramData\Anaconda3\envs\crawler\lib\threading.py", line 865, in run
self._target(*self._args, **self._kwargs)
File "", line 8, in dealClient
print("Accept new connection from {}: {} ...".format(addr))
IndexError: tuple index out of range
- 创建Socket,连接远程地址。
- 连接后发送数据和接收数据。
- 传输完毕后,关闭Socket。
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("127.0.0.1", 9999))
print("-->> {}".format(s.recv(1024).decode("utf-8")))
s.send(b"Hello, I am a client")
print("-->> {}".format(s.recv(1024).decode("utf-8")))
s.send(b"exit")
s.close()
1.5.2 UDP编程
- 创建Socket,绑定指定的IP与端口。
- 直接发送数据和接收数据
- 关闭Socket。
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(("127.0.0.1", 9999))
print("Bind UDP on 9999 ...")
while True:
data, addr = s.recvfrom(1024)
print("Received from {0[0]}: {0[1]}".format(addr))
s.sendto(("Hello, {}".format(data.decode("utf-8"))).encode("utf-8"), addr)
Bind UDP on 9999 ...
Received from 127.0.0.1: 52155
Received from 127.0.0.1: 52155
- 创建Socket
- 直接发送数据和接收数据
- 关闭Socket。
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
for data in [b"Hello", b"World"]:
s.sendto(data, ("127.0.0.1", 9999))
print(s.recv(1024).decode("utf-8"))
s.close()