TCP编程
Socket是网络编程的一个抽象概念。通常我们用一个Socket表示“打开了一个网络链接”,而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可。
客户端
大多数连接都是可靠的TCP连接。创建TCP连接时,主动发起连接的叫客户端,被动响应连接的叫服务器。
举个例子,当我们在浏览器中访问新浪时,我们自己的计算机就是客户端,浏览器会主动向新浪的服务器发起连接。如果一切顺利,新浪的服务器接受了我们的连接,一个TCP连接就建立起来的,后面的通信就是发送网页内容了。
所以,我们要创建一个基于TCP连接的Socket,可以这样做:
客服端基本思路是:
1.创建套接字;
2.建立连接;
3.发送数据;
4.接收数据;
5.关闭连接。
实例:

'''客户端'''
import socket
    # # 1、套接字
tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    # 2、创建链接
tcp_socket.connect(('172.27.35.1',8080))
    # 3、发送信息
tcp_socket.send('你好'.encode('gbk'))
    # 4、接收数据
ret = tcp_socket.recv(1024)
print(ret.decode('gbk'))
	#5.关闭连接
tcp_socket.close()

服务端:
基本思路为:
1、创建socke套接字;
2、需要使用bind来绑定端口;
3、listen监听模式,等待接收用户的链接,使得套接字变成被动状态;
4、accept处理用户链接
示例:

import threading
import socket
def recv_data(service_client_socket):
    '''这个函数主要创建接收客户端的消息'''
    # 收消息
    try:
        while True:
            data = service_client_socket.recv(1024)
            if data:
                print(data.decode('gbk'))
            else:
                service_client_socket.close()
                break
    except Exception as e:
        print(e)
        
if __name__ == '__main__':
    # 1、套接字
    server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    # 2、需要使用bind来绑定端口
    server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
    server_socket.bind(("",8080))
    # 3、listen监听模式,等待接收用户的链接,使得套接字变成被动状态
    server_socket.listen()
    while True:
        # 主程序里面只是实现创建新的服务套接字
        service_client_socket,client_addressinfo = server_socket.accept()
        print(service_client_socket)
        print(client_addressinfo)
        # 服务套接字服务的过程扔给多线程取处理,此时并不影响主程序床架服务套接字
        recv_thread = threading.Thread(target=recv_data,args=(service_client_socket,))
        recv_thread.start()

TCP注意点:
1、 TCP服务器一般情况下,需要绑定,不绑定客户端找不到;
2、 TCP的客户端不需要绑定,主动链接服务器,这个时候,只需要知道服务器的IP和端口;
3、 TCP服务端通过Listen ()这个函数变主动为被动;
4、 客户端必须通过connect之后才能与服务端通信;
5、 accept()这个函数会创建一个新的套接字,这个套接字用来服务对应的客户端;
6、 关闭新的套接字(人工客服),说明服务已经完成;
7、 一般情况下,服务器的套接字不用关闭;
8、 server_ocket在关闭之后,新的客户端不能进行链接,但是已经链接的客户端正常通信|