网络编程(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() #关闭链接


#输出

服务端的信息




猜你喜欢

转载自www.cnblogs.com/mjiu/p/9053979.html