客户端
'''
1、创建服务端端套接字对象(socket)
2、和服务器端套接字建立连接(connect)
3、发送数据到服务器端(send)
4、接受服务器端的数据(recv)
5、关闭套接字(close)
'''
import socket
if __name__ == '__main__':
#socket.AF_INET:IPV4地址类型 SOCK_STREAM:tcp传输协议类型
tcp_client_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#客户端程序不强制要求绑定端口号
tcp_client_socket.connect(("192.168.1.111",8080))
tcp_client_socket.send('你好'.encode('gbk'))
recv_data=tcp_client_socket.recv(1024)#表示每次接受的最大字节数
print('接受的数据为:',recv_data.decode('gbk'))#对接收数据进行解码
tcp_client_socket.close()
服务端(单任务)
'''
1、创建服务端端套接字对象(socket)
2、绑定端口号(bind)
3、设置监听(listen)
4、等待接受客户端的连接请求(accept)
5、接收数据(recv)
6、发送数据(send)
7、关闭套接字(close)
'''
import socket
if __name__ == '__main__':
#socket.AF_INET:IPV4地址类型 SOCK_STREAM:tcp传输协议类型
tcp_server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#设置端口复用,服务端程序退出,端口号立刻释放
#SOL_SOCKET表示当前套接字 SO_REUSEADDR表示复用端口号选项 True确认复用
tcp_server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
#绑定端口号。第一个参数表示ip地址,一般不指定,表示本机的任何一个ip都行
#第二个参数表示端口号
tcp_server_socket.bind(('',8080))
#设置监听。128表示最大等待的连接个数。
tcp_server_socket.listen(128)
#等待接受客户端的连接请求
#每次当客户端和服务器端连接成功都会返回一个套接字
#tcp_server_socket只负责等待接收客户端的连接请求,收发消息不适用该套接字
result_socket,result_addr = tcp_server_socket.accept()
print('客户端的IP和端口号为:',result_addr)
#代码执行到此处说明客户端和服务端建立连接成功
recv_data=result_socket.recv(1024)
print('接收的数据为:',recv_data.decode('gbk'))
send_data='你好我是服务端.......'.encode('gbk')
result_socket.send(send_data)
result_socket.close()
tcp_server_socket.close()
服务端(多任务)
'''
1、创建服务端端套接字对象(socket)
2、绑定端口号(bind)
3、设置监听(listen)
4、等待接受客户端的连接请求(accept)
5、接收数据(recv)
6、发送数据(send)
7、关闭套接字(close)
'''
import socket
import threading
def socket_tcp_thread(re_socket,re_addr):
while True:
recv_data=re_socket.recv(1024)
if recv_data:
print(recv_data.decode('gbk'),re_addr)
re_socket.send('正在连接:'.encode('gbk'))
else :
print('客户机{}下线了....'.format(re_addr))
break
re_socket.close()
if __name__ == '__main__':
tcp_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
tcp_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
tcp_socket.bind(('',8080))
tcp_socket.listen(128)
while True:
re_socket,re_addr=tcp_socket.accept()
print('客户端连接成功:',re_addr)
tcp_thred=threading.Thread(target=socket_tcp_thread,args=(re_socket,re_addr))
tcp_thred.setDaemon(True)
tcp_thred.start()
#re_socket.send('发送的数据:'.encode('gbk'))
#re_socket.close()
函数具体功能参考:菜鸟教程: https://m.runoob.com/python3/python3-socket.html/