python网络编程

目录

socket

bind

listen

accept

Thread

start

recv

decode

close

自己写的一个服务和客户通信


socket

server_socket = socket(AF_INET,SOCK_STREAM)

用于创建一个 AF_INET 类型的 TCP 套接字。它使用的套接字类型是 SOCK_STREAM,这对应于面向连接的可靠的字节流传输。

bind

server_socket.bind(("192.168.8.143",8899))

调用 bind() 函数将套接字与特定的 IP 地址和端口号绑定在一起。

使用了一个服务器套接字 server_socket,并将其绑定到 IP 地址 “192.168.8.143” 和端口号 8899 上。

listen

server_socket.listen(5)

listen() 函数将服务器套接字置于监听状态,以等待客户端的连接。

server_socket.listen(5) 这行代码用于让服务器套接字进入监听状态,并指定同时接受的最大连接数为 5。

accept

client_socket, client_info = server_socket.accept()

accept() 函数被调用。它会阻塞程序的执行,直到有客户端连接到服务器。一旦有客户端连接,accept() 函数将会返回一个新的套接字对象 client_socket,用于与该客户端进行通信。

server_socket.accept() 用于接受客户端的连接请求,并返回一个新的套接字对象 client_socket,以及客户端的地址信息 client_info

Thread

Thread(target=recv_data,args=(client_socket,client_info))

代码利用多线程创建了一个子线程,用于接收数据。

target 参数指定了在子线程中要执行的函数

args 参数是一个元组,包含了传递给 recv_data 函数的参数

start

start() 是用于启动子进程的方法。但在网络编程中,我们通常是使用 start() 方法来启动客户端连接,而不是启动子进程。

recv

recv_data=client_socket.recv(1024)

是用于在套接字,它会尝试从对应的客户端接收最多指定字节数(这里是 1024 字节)的数据。

decode

recv_data.decode('gbk')

将接收到的数据(假设是使用GBK编码的字节串)解码为字符串的操作。

在网络通信中,数据在传输过程中通常以字节串的形式进行传输,因此接收的数据也是以字节串的形式表示。如果你知道数据使用的是特定的字符编码(例如GBK、UTF-8等),你可以使用 .decode() 方法将字节串解码成对应的字符串。

close

client_socket.close()

用于关闭套接字连接的方法。

在网络通信中,当服务器与客户端之间的通信结束后,通常需要调用 close() 方法关闭连接,释放资源。

自己写的一个服务和客户通信

服务:
from socket import *
from threading import Thread

def recv_data(client_socket,client_info):
	while True:
		recv_data=client_socket.recv(1024)
		recv_content = recv_data.decode('gbk')
		print(f'客户端说:{recv_content},来自:{client_info}')

		if recv_content == "end":
			print('结束消息')
			break

	client_socket.close()
def send_data(client_socket,client_info):
	while True:
		msg = input('>')
		client_socket.send(msg.encode('gbk'))

		if msg == 'end':
			print('结束发消息')
			break
	client_socket.close()
if __name__ == '__main__':
	server_socket = socket(AF_INET,SOCK_STREAM)
	server_socket.bind(("192.168.8.143",8899))
	server_socket.listen(5)
	print('等待连接')
	while True:
		client_socket, client_info = server_socket.accept()
		print("一个客户端建立连接成功!")
		t = Thread(target=recv_data,args=(client_socket,client_info))
		t2 = Thread(target=send_data,args=(client_socket,client_info))
		t .start()
		t2.start()
客户:
 
from socket import *
from threading import Thread


def recv_data():
    while True:
        recv = client_socket.recv(1024)
        recv_content = recv.decode('gbk')
        print(f'服务端说:{recv_content}')
        if recv_content == 'end':
            print('结束接收消息')
            break


def send_data():
    while True:
        msg = input('>')
        client_socket.send(msg.encode('gbk'))
        if msg == 'end':
            break


if __name__ == '__main__':
    client_socket = socket(AF_INET, SOCK_STREAM)
    client_socket.connect(("localhost", 8899))

    t1 = Thread(target=recv_data)
    t2 = Thread(target=send_data)
    t1.start()
    t2.start()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值