Socket编程python示例

socket

 socket最初被作为BSDUNIX的进程通信机制,通常被称作套接字。 当然现在socket已经是window,mac linux等操作系统共同遵守的网络编程标准。它是用来描述IP地址和端口号,是一个通信链的句柄,socket是使用IP地址+端口+协议,一个三元组组成的具有唯一标识的通信链路,可以用来实现在不同虚拟机或者不同计算机之间的通信,同时也能实现在同一个主机内的不同进程间的通信。

Internet中的主机一般都是运行了多个服务软件,同时提供多种服务,每个服务都会打开一个socket, 并绑定到一个端口上,所以不同的端口对应不同的服务。

实战演练

socket TCP

TCP 服务器端代码:

import socket
import datetime

HOST = '0.0.0.0'
PORT = 3434

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)

while True:
    conn, addr = s.accept()
    print("Clent %s connected!" % str(addr))
    dt = datetime.datetime.now()
    message = "Current time is " + str(dt)
    conn.send(message)
    print("Sent: ", message)
    conn.close()

代码中通过socket(),bind(), listen()的一系列调用实现了对指定端口的监听,通过accept()接受客户端的连接,send()是向客户端发送数据。绑定地址为0.0.0.0可以监听所有的可用IP

TCP客户端代码:

import socket

HOST = '127.0.0.1'
PORT = 3434

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect((HOST, PORT))
print("Connect %s :%d ok " % (HOST, PORT))
data = s.recv(1024)
print("Received: ", data)
s.close()

客户端代码connect()调用,连接服务器,连接成功后从服务器接受发来的数据。

其中各个名词含义如下:

执行结果如下:先执行server端程序,再执行客户端代码

 

socket UDP

UDP 没有建立连接和断开连接的概念,所以稍微简单点。多了两个原语

recvfrom(): 从绑定的地址接收数据

sendto():向指定的地址发送数据,在调用的参数中应该传入通信对端的地址和端口

 

UPD 服务器端的代码:

import socket

HOST = '0.0.0.0'
PORT = 3434

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((HOST, PORT))

while True:
    data, addr = s.recvfrom(1024)
    print("Received: %s from %s" % (data, str(addr)))

s.close()

 

UPD客户端代码:

import socket

HOST = '127.0.0.1'
PORT = 3434

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

data = "Hello UPD!"
s.sendto(data, (HOST, PORT))
print("Sent: %s to %s:%d" % (data, HOST, PORT))
s.close()

需要注意的是在建立socket对象的时候传入的参数是:s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

其中AF_INET:表示使用的是IPV4, SOCK_DGRAM:表示socket使用的UDP,上面TCP代码中使用的是SOCK_STREAM:表示socket使用的是TCP

执行结果如下:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值