-
简单TCP过程
第一次握手:客户端 发送SYN报文,设置随机数序号X,服务器由SYN=1知道,客户端要求建立联机
第二次握手:服务器端接收到客户端的报文之后,经过处理,返回给客户端SYN+ACK报文,同时设置随机序号Y,此时返回的报文确认ACK=X+1
第三次握手:接收到报文的客户端,会在处理确认之后,再发送一个报文给服务器端,此时确认为ACK=Y+1
服务器端接收到客户端发送的报文之后,会在服务器端与客户端形成一种通路,此后的数据就可以在这个通路上就可以传输。
其实就是TCP/IP三次握手链接,面试被问过,没说好。这次好好理解一下原理过程
查看全部 -
服务器端和客户端有什么区别 1:服务器端是为客户端服务的,客户端是为真正的客户服务的 2:客户端是请求方或是指令方发出的,而服务器端是响应方查看全部
-
扩展
发送端:
#coding=gbk import socket #实例化模块 sk = socket.socket() #定义连接ip和port ip_port = ('127.0.0.1',9999) #服务器连接 sk.connect(ip_port) #输入信息 msg_input = input("是否开始发送文件:yes/no") #发送消息并编码 sk.send(msg_input.encode()) #如果发送yes开始上传文件 if msg_input == 'yes': #打开文件 with open('ceshi.py','rb')as f: #按每一段分割文件 for i in f: #数据上传 sk.send(i) #等待接收完成标志 data = sk.recv(1024) #判断服务器端是否真正的接收完成 if data != b'success': print(data) break #给服务器端发送结束信号 sk.send('quit'.encode()) #否则关闭本地连接 else: #关闭连接 sk.close()
接收端:
#coding=gbk import socket #实例化模块 sk = socket.socket() #定义连接ip和 port ip_port = ('127.0.0.1',9999) #服务器绑定端口 sk.bind(ip_port) # 最大连接数 sk.listen(5) #while循环客户端连接 while True: # 等待客户端连接 conn,address = sk.accept() #接收发送端确认信息 da = conn.recv(1024) #如果发送端发送yes开始接收文件 if da == b'yes': # 一直使用当前连接进行数据发送 # 直到结束标志出现 while True: with open("file","ab")as f: #接收数据 data = conn.recv(1024) print(data) #如果接收数据信息是:quit则退出当前循环 if data == b'quit': print("文件接收完成!") break #否则写入数据 else: f.write(data) #发送接收完成标志 conn.send('success'.encode()) #否则退出当前循环 else: break #打印提示信息 print("关闭文件接收程序") #关闭连接 sk.close()
查看全部 -
客户端=============================
import socket
client = socket.socket()
ip_port = ("127.0.0.1",8888)
client.connect(ip_port)
data = client.recv(1024)
print(data.decode())
while True:
msg_input = input("请输入发送的消息:")
client.send(msg_input.encode())
if msg_input == "exit":
break
data = client.recv(1024)
print(data.decode())
服务端====================
import socket
sk = socket.socket()
ip_port = ("127.0.0.1",8888)
sk.bind(ip_port)
sk.listen(5)
while True:
print("正在等待接受数据..........")
conn,address = sk.accept()
msg = "连接成功"
conn.send(msg.encode())
while True:
data = conn.recv(1024)
pirnt(data.decode())
if data == b"exit":
break
conn.send(data)
conn.send(str(random.randint(1,1000)))
conn.close()
查看全部 -
# 导入模块 import socket # 创建实例 sk = socket.socket() # 定义绑定ip&port ip_port = ('127.0.0.1', 8888) # 绑定监听 sk.bind(ip_port) # 最大连接数 sk.listen(5) # 提示信息 print('正在进行等待接收数据....') # 接收数据 conn, address = sk.accept() # 定义信息 msg = "Hello World" # 返回信息 conn.send(msg.encode()) # 主动关闭连接 conn.close()
查看全部 -
Socket查看全部
-
Socket查看全部
-
Socket查看全部
-
Socket查看全部
-
import socket
client = socket.socket();
ip_port = ("127.0.0.1",8888);
client.connect(ip_port);
data = client.recv(1024);
print(data.decode());
查看全部 -
服务器段和客户端都是基于tcp的
这里 客户端也是socket.socket() ??
查看全部 -
socket是阻塞的(python是阻塞的?)
5的意思是 可以挂起的最大连接数
查看全部 -
import socket
sk = socket.socket();
ip_sort = ("127.0.0.1", 8888);
sk.bind(ip_port);
sk.listen(5);
//正在等待接受数据
print("Waiting...");
//接受数据
conn,address = sk.accpet();
msg = "hello, world";
//python3.x 以上都是以byte类型发送 所以需要强制转换为byte
conn.sent(msg.encode());
//总结
sk = socket.socket();
sk.bind(//某个值);
sk.listen(5);
conn //这是客户端 address // 这是客户端的地址 sk.accept();
sk.send();
查看全部 -
socket通讯使用了tcp协议 所以看起来一样
查看全部 -
socket通信过程
查看全部
举报