网络接口api

#服务端
import socket,sys
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
host = socket.gethostname()
port = 8060
server.bind((host,port))
server.listen()
while True:
    client,addr = server.accept()
    print(‘连接地址:‘,str(addr))
    while True:
        data = client.recv(1024)
        print(‘Client(reciver):‘,data.decode())
        msg = input(‘Server(Send):‘)
        client.send(msg.encode(‘utf-8‘))
client.close()
#客户端
import socket,sys
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
host = socket.gethostname()
port = 8060
client.connect((host,port))
while True:
    msg = input(‘Client(Send):‘)
    client.send(msg.encode(‘utf-8‘))
    rec = client.recv(1024)
    print(‘Server(reciver):‘,rec.decode())
client.close()

系统调用过程中,其中和网络有关的系统调用信息如下:

socket(AF_INET, SOCK_STREAM, IPPROTO_IP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(1234), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 1), ...}) = 0
sendto(3, "Hello,I‘m liu", 13, 0, NULL, 0) = 13
recvfrom(3, "Hi,liu", 1024, 0, NULL, NULL) = 6
write(1, "Hi,liu\n", 7Hi,liu) = 7
close(3) = 0

可以从这些信息中看的python提供的网络接口API和Linux Socket API间一一对应的关系:

  • 在通过socket.socket()创建套接字时,底层调用的是socket()这个API,创建的套接字文件描述符是3(Shell启动的进程会打开三个与标准输入输出相关的文件,描述符为0,1,2)。
  • socket.connect()对应的是connect() API,第一个参数指明文件描述符3,即在前面创建的套接字上建立连接,然后python帮我们自动填充了sockaddr类型的结构体。
  • 可以看到,尽管创建的是流式套接字,但底层发送、接收数据还是使用的sendto和recvfrom,不过后两个参数(目的/源地址及其长度)被设为了NULL,《Unix网络编程》中说,在TCP中,connect函数调用后可以使用sendto及recvfrom,但还是不清楚python为什么这样实现socket.send()和socket.recv()。

原文地址:https://www.cnblogs.com/sylg12138/p/12005553.html

时间: 2024-07-31 02:35:06

网络接口api的相关文章

云主机的概念和优势解析

云计算被誉为第四次信息技术革命. 基于云计算的云主机服务已经成为众多建站用户的首选. 云主机是云计算在基础设施应用上的重要组成部分,在一组集群主机上虚拟出类似独立主机的部分,集群中每个主机上都会有云主机的一个镜像,以此来提高主机的安全稳定性.简单说,除非所有的集群内主机全部出问题,云主机才会无法访问. 提供云主机服务的IDC公司将其硬件和网络线路做成一朵"云",让后向客户提供一些网络接口API通向这朵"云".由于这多"云"里有很多服务器,所以每个

云主机与VPS的差别

VPS(Virtual Private Server 虚拟专用服务器),将一台服务器分割成多个虚拟专享服务器的优质服务.每个VPS都可分配独立公网IP地址.独立操作系统.独立超大空间.独立内存.独立CPU资源.独立执行程序和独立系统配置等.用户除了可以分配多个虚拟主机及无限企业邮箱外,更具有独立服务器功能,可自行安装程序,单独重启服务器. 云主机(Cloud hosting)是服务器集群基础上虚拟化.主机公司将它的硬件和网络线路,做成一朵"云",然后提供一些通向这朵"云&qu

移动开发 网络流量精简攻略

作为一名移动开发者,在过去的几年里也做过不少的项目,今天就来写一篇浅薄的节省网络流量的文章,希望这篇文章对所有的移动开发者,以及接口的服务端开发者都有帮助. 为什么要精简?(Why) 1.节省用户的流量. 因为用户的流量可能是要付费的,为用户节省流量是每一个移动开发者应当牢牢记住的原则之一 2.提高网络数据加载速度. 流量精简了,接口获取数据的速度会有提升,应用的一些页面加载速度可以提升,这点我想大家也都能理解 3.减轻服务器压力. 通过优化接口,减少数据量,可以提高服务器的利用率,减少服务器并

Visual Basic-手机归属查询

偶然间看到了一份手机号码归属地的数据库,9000多页的内容真是惊呆了,想着把它做成C++,但UI着实不咋样,索性用Visual Basic写了一份基于网络的手机归属查询. 结构很简单,用一张picture做背景,增加一个Textbox,三个Label(一个输出,一个作为拖动窗口,一个作为关闭按钮)和一个Image(负责command类此的效果). 数据库基于网络,也就是说必须联网才可以使用. 网络接口API是从网上找的, "http://www.096.me/api.php?phone=&quo

虚拟主机、VPS和云主机、服务器之间的区别与联系

一.四者的概念: (1) 虚拟主机从互联网诞生至今,大部分站长都是从虚拟主机开始学习建站的.所谓虚拟主机就是一台服务器上有许多网站,大家共享这台服务器的硬件和带宽.如果它发生故障,那么上面的所有网站都无法访问. (2) VPS主机也叫作虚拟专用服务器,它是将一部服务器分割成多个虚拟专享服务器的优质服务.每个VPS都可分配独立公网IP地址.独立操作系统.独立超大空间.独立内存.独立CPU资源.独立执行程序和独立系统配置等. (3) 云主机也可以看成是新一代的共享主机,首先主机公司将它的硬件和网络线

ZeroMQ 教程 002 : 高级技巧

本文主要译自 zguide - chapter two. 但并不是照本翻译. 上一章我们简单的介绍了一个ZMQ, 并给出了三个套路的例子: 请求-回应, 订阅-发布, 流水线(分治). 这一章, 我们将深入的探索一下ZMQ中的socket, 以及"套路" socket API 如果熟悉linux socket编程的同学阅读完了第一章, 一定有一种说不上来的别扭感觉.因为通常情况下, 当我们讨论socket的时候, 我们一般指的是操作系统提供的网络编程接口里的那个socket概念. 而在

性能基本概念转载

socket API 如果熟悉linux socket编程的同学阅读完了第一章, 一定有一种说不上来的别扭感觉.因为通常情况下, 当我们讨论socket的时候, 我们一般指的是操作系统提供的网络编程接口里的那个socket概念. 而在ZMQ中, 只是借用了这个概念的名字, 在ZMQ中, 我们讨论到socket的时候, 一般指代的是调用zmq_socket()接口返回的那个socket, 具体一点: zmq socket. zmq socket比起linux socket来说, 逻辑理解起来比较类

初遇云主机

进入软件学院云平台选择左侧计算资源,可以进行创建云主机云主机:一.共享主机和云主机 从互联网诞生至今,大部分站长都是从"共享主机"(shared hosting)开始学习建站的.所谓"共享主机",就是一台服务器上有许多网站,大家共享这台服务器的硬件和带宽.如果它发生故障,那么上面的所有网站都无法访问. "云主机"(Cloud hosting)可以看成是新一代的共享主机. 首先,主机公司将它的硬件和网络线路,做成一朵"云",然后

给协程加上同步互斥机制

前面一篇文章介绍了Linux内的同步互斥的概念.内核态和用户态Linux提供的同步/互斥接口.这里本文介绍下如何给协程加上同步.互斥机制. 简单说下协程coroutine: 参考文章 操作系统的课本中对进程.线程的定义:进程是最小的资源分配单位,线程是最小的调度单位. 随着互联网的飞速发展,互联网后台Server服务通常要面临高请求.高并发的挑战,一些业务Server通常要面临很高的网络IO请求.这也就是C10K问题. 现在对C10K问题的解决方案已经很成熟了,主要是 非阻塞IO+IO复用(ep