网络编程(socket)
Posted 爱学习爱生活的小九
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程(socket)相关的知识,希望对你有一定的参考价值。
socket简介
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部。
socket通信套路
当通过socket建立起2台机器的连接后,本质上socket只干2件事,一是收数据,一是发数据,没数据时就等着。
socket 建立连接的过程跟我们现实中打电话比较像,打电话必须是打电话方和接电话方共同完成的事情,我们分别看看他们是怎么建立起通话的
接电话方:
1.首先你得有个电话
2.你的电话要有号码
3.你的电话必须连上电话线
4.开始在家等电话
5.电话铃响了,接起电话,听到对方的声音
打电话方:
1.首先你得有个电话
2.输入你想拨打的电话
3.等待对方接听
4.say “hi 约么,我有七天酒店的打折卡噢~”
5.等待回应——》响应回应——》等待回应。。。。
把它翻译成socket通信
接电话方(socket服务器端):
1.首先你得有个电话\(生成socket对象\)
2.你的电话要有号码\(绑定本机ip+port\)
3.你的电话必须连上电话线\(连网\)
4.开始在家等电话\(开始监听电话listen\)
5.电话铃响了,接起电话,听到对方的声音\(接受新连接\)
打电话方(socket客户端):
1.首先你得有个电话\(生成socket对象\) 2.输入你想拨打的电话\(connect 远程主机ip+port\) 3.等待对方接听 4.say “hi 约么,我有七天酒店的打折卡噢~”\(send\(\) 发消息。。。\) 5.等待回应——》响应回应——》等待回应。。。。
用程序实现
服务端程序
#!/usr/bin/env python # -*- coding:utf-8 -*- import socket phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 生成套接字类型,这里 指定了链接方式 AF_INET(ipv4),tcp链接类型(SOCK_STREAM) phone.bind((‘127.0.0.1‘, 8080)) # 绑定服务端IP及端口 ,端口范围0-65535 1-1024 为系统使用,定义端口需要避开常用端口,防止冲突 phone.listen(10) # 最大链接数 print(‘starting....‘) #phone.accept() # 程序进行监听,捕捉客户端发起的链接请求 conn,client_addr = phone.accept() #获取客户端链接套接字并赋值给 conn , 客户端信息赋值给 client_addr data=conn.recv(1024) #接收数据最大值,单位 bytes, 对应客户端的发送信息 conn.send(‘服务端的信息‘.encode(‘utf-8‘)) #发送值,对应客户端的收取 conn.close() #关闭链接 phone.close() #关闭程序 #输出 starting....
客户端程序
#!/usr/bin/env python # -*- coding:utf-8 -*- import socket phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #定义与服务端一样的通信类型 phone.connect((‘127.0.0.1‘,8080)) #填写服务端IP地址及端口,进行链接 phone.send(‘客户端的信息‘.encode(‘utf-8‘))#因为传输都是已bytes 进行传输,所以先要进行解码, 这里为什么不用使用别的套接字进行传输,\ # 是因为之前已经指定了服务端的信息, 所以phone可以直接用来发送接收数据 data = phone.recv(1024) #同理接收 服务器端信息 print(data.decode(‘utf-8‘)) #同样编译 phone.close() #关闭链接 #输出 服务端的信息
以上是关于网络编程(socket)的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段14——Vue的axios网络请求封装
VSCode自定义代码片段14——Vue的axios网络请求封装