使用c/c++进行socket编程基础入门

一. 编程前必备的基础知识:

(1) 网络基础。你必须知道以下几点:

       ①熟悉TCP/IP协议四层模型,包括物理层、IP层、TCP/UDP层和应用层,熟悉滑动窗口等实现机制。

       ②我们一般所指的socket编程都是指TCP编程。由于UDP编程比较简单,而TCP的socket编程复杂得多,经常出现各种各样莫名其妙的问题,所以socket编程一般都是指TCP编程,下文如果没有特别说明,也都是指TCP编程。

       ③TCP与UDP的区别:TCP是面向连接的,除数据流的结尾无法从网络层预知是否全部接收到,中间是不会丢包的,不会丢掉任何一个字节;而UDP是无连接的,丢包是正常现象。

      ④ TCP是“全双工的字节流”,对这几个字必须要有透彻的理解,否则编程时就是一个马大哈,知其然不知其所以然。关于这几个字的理解,可以参考笔者的另外一篇博客文章“TCP的socket编程中全双工的字节流含义的深刻理解”(http://blog.youkuaiyun.com/waisock2017/article/details/78388380)。


(2) 编程前的基础知识

       ① socket编程的注意事项,参考笔者的另外一篇博客文章“TCP的socket编程中常见问题及注意事项”(http://blog.youkuaiyun.com/waisock2017/article/details/78448427)

       ② 阻塞与非阻塞。socket支持阻塞与非阻塞两种工作模式,通常网络上介绍的文章,都是使用默认的阻塞模式的。关于非阻塞模式的介绍,以及函数的各种返回值和各种细节,互联网上无论是国内或国外

最新版Socket编程,后面带有程序实例,并通过调试,可以直接编译运行;希望对大家有帮助。代码设计服务端、客户端socket实例,设计IPV4、IPV6的实例代码。 网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。 部分代码(服务器): #include #include #include #include #include #include #include #include #define SERVPORT 3333 /*服务器监听端口号 */ #define BACKLOG 10 /* 最大同时连接请求数 */ main() { int sockfd,client_fd; /*sockfd:监听socket;client_fd:数据传输socket */ struct sockaddr_in my_addr; /* 本机地址信息 */ struct sockaddr_in remote_addr; /* 客户端地址信息 */ if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror( "socket创建出错!"); exit(1); } my_addr.sin_family=AF_INET; my_addr.sin_port=htons(SERVPORT); my_addr.sin_addr.s_addr = INADDR_ANY; bzero( &(my_addr.sin_zero),8); if (bind(sockfd, (struct sockaddr *) &my;_addr, sizeof(struct sockaddr)) == -1) { perror( "bind出错!"); exit(1); } if (listen(sockfd, BACKLOG) == -1) { perror( "listen出错!"); exit(1); } while(1) { sin_size = sizeof(struct sockaddr_in); if ((client_fd = accept(sockfd, (struct sockaddr *) &remote;_addr, &sin;_size)) == -1) { perror( "accept出错"); continue; } printf( "received a connection from %s\n", inet_ntoa(remote_addr.sin_addr)); if (!fork()) { /* 子进程代码段 */ if (send(client_fd, "Hello, you are connected!\n", 26, 0) == -1) perror( "send出错!"); close(client_fd); exit(0); } close(client_fd); } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值