基于TCP的socket编程(windows篇)

在网络编程中,socket是初学者必须跨过的一个障碍,但是在初学的时候这个概念非常抽象,所以这里菜雄用一个自己理解的具象实例来引入这个抽象的概念。

这一篇只关注于TCP的socket代码的理解,如果要了解其它细节,那么听下回有空再分解:

TCP的socket可以理解为一个安装电话机到拆除电话机的过程。

服务器端 逐语句解释:

1、创建socket对象:

(购买一个电话机,后面的参数可以理解为电话机的型号)

SOCKET serv_fd= socket(AF_INET , SOCK_STREAM , 0);

第一个参数:该socket用的是ipv4 还是ipv6 还是其他的?

第二个参数:该socket的实现方式:是流 还是 报文?(对应的是TCP 还是 UDP?)

第三个参数:默认填写0,会根据前面两个参数自行匹配。

2、绑定socket对象:

(电话机买回来,要将电话卡号设置进去,就好比手机里要放电话卡,否者打不通电话)

SOCKADDR_IN servAdr;        //理解为电话卡
servAdr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");        //理解为电话机是哪个社区的?(上海的还是北京的?)
servAdr.sin_family = AF_INET;    //用的是电信该是移动?
servAdr.sin_port = htons(9527);    //社区里面的具体地址
bind(serv_fd, (SOCKADDR*)&serv_addr, sizeof(serv_addr))    //将电话卡和这个电话机进行绑定

第一个参数:用哪一个电话机

第二个参数:用哪一个电话卡号

第三个参数:电话卡号的长度是多少?

3、监听:

(为了防止电话机有电话进来没人接,拍指牛13的接电话人去接听)

listen(serv_fd, 5)

第一个参数:要听的哪一部电话机

第二个参数:这个人很牛13,能同时接听打进来几个电话,如果超过这个数,就打不进来了,会表示正在通话中。

4、接受:

(牛13的接电话人将对方号码信息记录下来)

SOCKET clnt_fd;            //对方的电话机
SOCKADDR_IN clnt_addr;          //对方电话机的详细信息保存的地址
int clnt_size = sizeof(clnt_addr);    //地址的长度
clnt_fd = accept(serv_fd, (SOCKADDR*)&clnt_addr, &clnt_size);    
//接电话的将对方的电话号码记到clnt_fd上,并将对方电话机的详细信息记到clnt_addr上。

第一个参数:接听的哪一部电话机

第二个参数:对方电话机的详细信息保存的地址

第三个参数:详细信息的长度

5、接受和发送:

(听别人讲什么,讲给别人听什么)

recv(clnt_fd, szMsg, MAX_BUFF_SIZE,0)    //接听别人的信息
send(clnt_fd, msg, len, 0);    //传递自己的信息

第一个参数:和哪一个号码进行交流

第二个参数:表达信息保存的开始地址

第三个参数:表达信息的长度

第四个参数:填0,历史遗留问题

6、关闭:

(电话机不用了就丢掉,在家占地方,还浪费钱)

closesocket(serv_fd);

第一个参数:丢的是哪一个电话机

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值