python网络编程之TCP

xiaoxiao2021-02-28  157

1.TCP服务端编写过程

2.TCP服务端代码

3.TCP客户端编写过程

4.TCP客户端代码

1.TCP服务端编写过程

首先,网络编程分为客户端编程和服务端编程。先说说服务端的编写

TCP服务端的编写过程

0.所需要引入的包: import socket

1.socket():socket模块中的socket对象 可用于建立一个套接字。原形:socket(family,type)

family 填 :socket.AF_INET 表示地址族为 ipv4  (现在还基本都是用 IPv4)

type   填 :socket.SOCK_STREAM 表示用的协议是 流协议(即TCP)

返回值 : 返回一个套接字对象,暂且把它叫做 s 

2.bind():用于把  套接字和(主机地址,端口号)进行绑定,使套接字和主机相关联

bind()是存在套接字对象中的。调用时: 套接字.bind()  ,例 s.bind()

bind()只有一个参数: 这个参数是个元组,里面的元素是 主机ip号和端口号,即 bind((ip,端口) )

3.listen():把程序进入监听模式,等待客户端的连接。把socket设置成服务器模式

一个整型参数:这个参数指定程序拒绝连接前,操作系统允许它挂起的连接数量,一般设置为5就行了

同样这个方法也是要用套接字对象调用的,即 s.listen()

4.accept():它会阻塞直到有客户端连接进来,然后返回一个元组,元组的数据是 代表客户端的新套接字 和 客户端的地址

同样这个方法也是要用套接字对象调用的

5.close():用于关闭套接字,停止本进程与服务端或客户端的连接

同样这个方法也是要用套接字对象调用的

6.recv():用于接收远程连接发来的信息,并返回接收到的信息

当没有消息发来时会阻塞。

有一个整形参数:用于指定缓冲区的大小

同样这个方法也是要用套接字对象调用的

7.sendall():用于向远端发送消息    (用sendall代替send)

有一个整数:指定发送的对象或数据

同样这个方法也是要用套接字对象调用的

2.TCP服务端代码

import socket #引入socket模块 HOST = '' #服务端不需要指定绑定的本地IP地址 PORT = 8888 #指定端口号为 8888 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #创建套接字 s.bind((HOST,PORT)) #绑定套接字 s.listen(5) #监听 conn,addr = s.accept() #等待客户端连接,有客户端连接则返回一个新的套接字来表示客户端 print('Client\'s addr:',addr) #打印客户端的信息 while True: #循环接收来自服务端的信息 data = conn.recv(1024) #接收客户端的信息 if not data: break print('Receive data:',data.decode('utf-8')) #打印客户端发来的信息,并以utf-8的编码方式来解码。(因为客户端是以UTF-8来编码的 ) conn.sendall(data) #把收到的信息发回客户端 conn.close() #关闭套接字

3.TCP客户端编写过程

0.也需要引入 socket模块。 import socket

1.socket():上面已经说过了

2.connect():用于连接服务器

参数:接收一个元组,包含服务器的 IP地址 和 服务器指定的端口号

同样这个方法也是要用套接字对象调用的

3.recv()和send()和close()上面都说过了

4.客户端代码

import socket HOST = 'localhost' #服务端的ip地址,但由于我是在同一台电脑测试,所以就用localhost这个宏 PORT = 8888 #服务端指定的端口 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #创建套接字 s.connect((HOST,PORT)) #连接服务端 data=input("please enter data") #从键盘输出信息 while data: s.sendall(data.encode('utf-8')) data = s.recv(512) print('Receive data:\n',data.decode('utf-8')) data = input('please enter data') s.close()

转载请注明原文地址: https://www.6miu.com/read-26413.html

最新回复(0)