Socket编程简述
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Socket编程简述相关的知识,希望对你有一定的参考价值。
Socket是进程之间通讯的一种方式,调用socket网络库中的API函数实现不同主机相关进程的数据交换。网络中所有涉及通讯的设备都需要scoket。首先我们需要了解一下相关概念
1、IP地址:根据TCP/IP协议分配给网络中主机的唯一网络地址,该地址是网络通讯中必须知道的
2、端口号:主机内部用来区分本地通讯进程的,一个进程必须有一个端口号
3、连接:指两个进程之间的通讯链路
4、半相关:网络中用一个三元组可以子在全局唯一标识一进程(三元组:协议,本地地址,本地端口号)
5、全相关:一个完整的网间进程通讯是需要两个进程组成(高层协议一致),一个完整的通讯是需要一个五元组标识
(五元组:协议,本地ip,本地端口,目的ip,目的端口)
Python中socket是通过调用socket模块,调用里面的相关函数实现tcp、udp通讯。
socket编程思路:
TCP服务端:
创建套接字,绑定套接字到本地IP与端口
socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind()
开始监听连接
s.listen()
进入循环,不断接受客户端的连接请求
s.accept()
然后接收传来的数据,并发送给对方数据
s.recv()
s.sendall()
传输完毕后,关闭套接字
s.close()
TCP客户端:
创建套接字,连接远端地址
socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect()
连接后发送数据和接收数据
s.sendall()
s.recv()
传输完毕后,关闭套接字
s.close()
=============================================
UDP通讯实现:
# 创建套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 设置接收方ip端口(ip, port)
dest_addr = ()
# 绑定本地端口(ip,端口)ip不填写默认检测所有本地ip
localip_addr =()
udp_socket.bind()
# 获取输入数据
send_data = input()
# 发送数据
udp_socket.sendto(send_data.encode("utf-8"), dest_addr)
# 接受数据
recv_data = udp_socket.recvfrom(1024)
# 打印接受的数据,window用gbk,linux默认utf-8
print(recv_data[0].decode("gbk"))
for tmp in recv_data[1]:
print(tmp)
# 关闭套接字
udp_socket.close()
以上是关于Socket编程简述的主要内容,如果未能解决你的问题,请参考以下文章