网络编程-socket

TCP

TCP服务端

  1. 创建套接字socket
  2. 绑定端口bind
  3. 侦听客户请求listen
  4. 接受客户连接accept
  5. 接受/发送
  6. 关闭套接字
import socket
sk = socket.socket()
sk.bind(('127.0.0.1', 8080))  # bind('ip', port)
sk.listen()

conn, addr = sk.accept()  # connect 连接, address 地址

ret = conn.recv(1024)  # receive   revv(1024) 一次接受1024个字节
print(ret)
conn.send(b'hello')  # 只能发送bytes类型数据3

# 先关闭连接,再关闭套接字
conn.close()
sk.close()

TCP客户端

  1. 创建套接字
  2. 连接服务器
  3. 发送/接受
  4. 关闭套接字
import socket
sk = socket.socket()
sk.connect(('127.0.0.1', 8080))

sk.send(b'hi')
ret = sk.recv(1024)
print(ret)

sk.close()

例子:对话

服务端

import socket
sk = socket.socket()
sk.bind(('127.0.0.1', 8080))
sk.listen()

conn, addr = sk.accept()
while True:
    ret = conn.recv(1024).decode('utf-8')
    if ret == 'bye':
        conn.send(bytes('bye', encoding='utf-8'))
        break
    print(ret)
    conn.send(bytes(input('>>>'), encoding='utf-8'))

conn.close()
sk.close()

客户端

import socket
sk = socket.socket()
sk.connect(('127.0.0.1', 8080))

while True:
    sk.send(bytes(input('>>>'), encoding='utf-8'))
    ret = sk.recv(1024).decode('utf-8')
    if ret == 'bye':
        sk.send(b'bye')
        break
    print(ret)

sk.close()

UDP

UDP服务端

  1. 创建套接字socket
    (type=socket.SOCK_DGRAM)
  2. 绑定端口bind
  3. 接受客户消息
    recvfrom()
  4. 向客户端发送消息
    sendto(msg, addr)
  5. 关闭套接字
import socket
# 1. 创建udp连接
sk = socket.socket(type=socket.SOCK_DGRAM)  # datagram 数据报文
# 2. 起服务
sk.bind(('127.0.0.1', 8080))

# 3. 等待客户端来连接
msg, addr = sk.recvfrom(1024)  # 通过recvfrom设定一个报文的大小,并获得一个数据报文与客户端地址
print(msg.decode('utf-8'))
sk.sendto(input('服务端回复:>>>').encode('utf-8'), addr)

sk.close()

UDP客户端

  1. 创建套接字
  2. 向服务端发送消息
    sendto(msg, ip_port)
  3. 接受服务端过来的消息
    recvfrom()
  4. 关闭套接字
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
ip_port = ('127.0.0.1', 8080)

msg = input('客户端发送:>>>').encode('utf-8')
sk.sendto(msg, ip_port)
ret, addr = sk.recvfrom(1024)
print(ret.decode('utf-8'))

sk.close()

你可能感兴趣的:(网络编程-socket)