Python、/C/C++ Socket编程实例

Socket:

socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。 
在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原意那样,像一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。

SOCKET的流程

正如它的直译,它的功能也就像插座一样。(经典的比喻是电话网,这里不再赘述)(括号中是事实上的对象)

对供应商(server)来说:

1. 先装(申请)一个插座(socket)
2. 把插座(socket)登记到电网中的固定位置(bind)
3. 坐等用户(client)连接(listen)
4. 接受用户的连接申请(accept)
5. 进行数据交换(read&write)
6. 关闭连接(close)

这里面要特殊说明的一点是accept部分,服务器accept以后并不是直接在当前插座上与用户交流,而是会返回一个 新socket ,这个socket和用户相连。可以想象用户的线头刚刚从插座里钻出来,就被listening的server accept:抓到旁边一个新socket里面,从而 空出 那个对外的socket继续接收别人的connect申请。

而对用户来说:

1. 装一个插座(socket)
2. 连接(connect)供应商(server)
3. 取电付费(read&write)
4. 不用了关掉(close)

如此便完成了不同程序之间( 即不一定非要不同电脑,也可以用于进程之间 )的信息传递。



详细流程:

来自:点击打开链接

要注意的是函数失败后linux返回的是-1,windows返回SOCKET_ERROR(等于-1)。windows下用GCC似乎还要加-lwsock32命令。windows下返回的数据类型是SOCKET(然而也只是对u_int的包装而已),linux下返回int。即socket的代号。下文为了区分SOCKET与别的数据类型统一以SOCKET来做套接字的类型。


1.头文件
对于windows:

    #include<winsock2.h>

然后还需要初始化socket的DLL:

    WSADATA wsaData;
    WSAStartup(0x202,&wsaData);
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值