C++ Socket TCP "Hello World!"
这是C++ SOCKET网络程序中的C/S结构之TCP "Hello World !",共两个控制台工程:
- //////////////////////////////////////////////////////////////////////////
- // TCPServer.cpp
- #include <stdio.h>
- #include <WINSOCK2.H>
- #pragma comment(lib,"WS2_32.lib")
- #define BUF_SIZE 64 // 缓冲区大小
- int main(void)
- {
- WSADATA wsd; // WSADATA变量
- SOCKET sServer; // 服务器套接字
- SOCKET sClient; // 客户端套接字
- int retVal; // 返回值
- char buf[BUF_SIZE]; // 接受数据
- // 初始化套接字动态库
- ZeroMemory(buf,BUF_SIZE);
- if(WSAStartup(MAKEWORD(2,2),&wsd) != 0)
- {
- printf("WSAStartup failed !/n");
- return 1;
- }
- // 创建套接字
- sServer = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
- if(INVALID_SOCKET == sServer)
- {
- printf("socket failed !/n");
- WSACleanup();
- return -1;
- }
- // 服务器套接字地址
- SOCKADDR_IN addrServ;
- addrServ.sin_family = AF_INET;
- addrServ.sin_port = htons(4999);
- addrServ.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
- // 绑定套接字
- retVal = bind(sServer,(const struct sockaddr*)&addrServ,sizeof(SOCKADDR_IN));
- if(SOCKET_ERROR == retVal)
- {
- printf("bind failed !/n");
- closesocket(sServer);
- WSACleanup();
- return -1;
- }
- // 监听套接字
- retVal = listen(sServer,1);
- if(SOCKET_ERROR == retVal)
- {
- printf("listen failed !/n");
- closesocket(sServer);
- WSACleanup();
- return -1;
- }
- // 接受客户请求
- sockaddr_in addrClient;
- int addrClientlen = sizeof(addrClient);
- sClient = accept(sServer,(sockaddr FAR*)&addrClient,&addrClientlen);
- if(INVALID_SOCKET == sClient)
- {
- printf("accept failed !/n");
- closesocket(sServer);
- WSACleanup();
- return -1;
- }
- // 接受客户数据
- retVal = recv(sClient,buf,BUFSIZ,0);
- if(SOCKET_ERROR == retVal)
- {
- printf("recv failed !/n");
- closesocket(sServer);
- closesocket(sClient);
- WSACleanup();
- return -1;
- }
- // 退出程序
- printf("Recv From Client:%s/n",buf);
- retVal = send(sClient,"Hello World !",strlen("Hello World !"),0);
- if(SOCKET_ERROR == retVal)
- {
- printf("send failed !/n");
- closesocket(sServer);
- closesocket(sClient);
- WSACleanup();
- return -1;
- }
- // 退出程序
- closesocket(sServer);
- closesocket(sClient);
- WSACleanup();
- return 0;
- }
- //////////////////////////////////////////////////////////////////////////
- // TCPClient.cpp
- #include <stdio.h>
- #include <Winsock2.H>
- #pragma comment(lib,"WS2_32.lib")
- #define BUF_SIZE 64 // 缓冲区大小
- int main(void)
- {
- WSADATA wsd; // 初始化<a href="http://lib.csdn.net/base/14" class='replace_word' title="MySQL知识库" target='_blank' style='color:#df3434; font-weight:bold;'>数据库</a>
- SOCKET sHost; // 服务器套接字
- SOCKADDR_IN servAddr; // 服务器地址
- char buf[BUF_SIZE]; // 接受数据缓冲区
- int retVal; // 返回值
- if(WSAStartup(MAKEWORD(2,2),&wsd) != 0)
- {
- printf("WSAStartup failed !/n");
- return 1;
- }
- // 创建套接字
- sHost = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
- if(INVALID_SOCKET == sHost)
- {
- printf("socket failed !/n");
- WSACleanup();
- return -1;
- }
- // 设置服务器地址
- servAddr.sin_family = AF_INET;
- servAddr.sin_addr.S_un.S_addr = inet_addr("192.168.1.254");
- servAddr.sin_port = htons(4999);
- int sServerAddlen = sizeof(servAddr);
- // 连接服务器
- retVal = connect(sHost,(LPSOCKADDR)&servAddr,sizeof(servAddr));
- if(SOCKET_ERROR == retVal)
- {
- printf("connect failed !/n");
- closesocket(sHost);
- WSACleanup();
- }
- // 向服务器发送数据
- ZeroMemory(buf,BUF_SIZE);
- strcpy(buf,"Hello World !");
- retVal = send(sHost,buf,strlen(buf),0);
- if(SOCKET_ERROR == retVal)
- {
- printf("send failed !/n");
- closesocket(sHost);
- WSACleanup();
- return -1;
- }
- // 向服务器接受数据
- retVal = recv(sHost,buf,sizeof(buf)+1,0);
- printf("Recv From Server: %s/n",buf);
- // 退出程序
- closesocket(sHost);
- WSACleanup();
- return 0;
- }
程序运行效果:
源代码下载地址:
http://download.csdn.net/source/1667113
http://www.rayfile.com/files/79dbe03a-a1fe-11de-83dd-0014221b798a/
http://blog.csdn.net/wangningyu/article/details/4556327
C++ Socket TCP "Hello World!"的更多相关文章
- 分布式消息总线,基于.NET Socket Tcp的发布-订阅框架之离线支持,附代码下载
一.分布式消息总线以及基于Socket的实现 在前面的分享一个分布式消息总线,基于.NET Socket Tcp的发布-订阅框架,附代码下载一文之中给大家分享和介绍了一个极其简单也非常容易上的基于.N ...
- 分享一个分布式消息总线,基于.NET Socket Tcp的发布-订阅框架,附代码下载
一.分布式消息总线 在很多MIS项目之中都有这样的需求,需要一个及时.高效的的通知机制,即比如当使用者A完成了任务X,就需要立即告知使用者B任务X已经完成,在通常的情况下,开发人中都是在使用者B所使用 ...
- 重新想象 Windows 8 Store Apps (62) - 通信: Socket TCP, Socket UDP
[源码下载] 重新想象 Windows 8 Store Apps (62) - 通信: Socket TCP, Socket UDP 作者:webabcd 介绍重新想象 Windows 8 Store ...
- 关于socket tcp 断线重连
这个问题困扰过我几次,都没有来得及研究,今天研究一下. 首先写一个最简易的socket tcp程序,连接成功后再关闭服务器然后再用客户端各种操作看是什么情况 测试表明 (1)客户端已经连接,当服务端关 ...
- ActionScript简单实现Socket Tcp应用协议分析器
转自..smark http://www.cnblogs.com/smark/archive/2012/05/15/2501507.html ActionScript简单实现Socket Tcp应用协 ...
- 与众不同 windows phone (30) - Communication(通信)之基于 Socket TCP 开发一个多人聊天室
原文:与众不同 windows phone (30) - Communication(通信)之基于 Socket TCP 开发一个多人聊天室 [索引页][源码下载] 与众不同 windows phon ...
- 基于.NET Socket Tcp的发布-订阅框架
基于.NET Socket Tcp的发布-订阅框架 一.分布式消息总线 在很多MIS项目之中都有这样的需求,需要一个及时.高效的的通知机制,即比如当使用者A完成了任务X,就需要立即告知使用者B任务X已 ...
- 初步探究java中程序退出、GC垃圾回收时,socket tcp连接的行为
初步探究java中程序退出.GC垃圾回收时,socket tcp连接的行为 今天在项目开发中需要用到socket tcp连接相关(作为tcp客户端),在思考中发觉需要理清socket主动.被动关闭时发 ...
- Socket TCP Server一个端口可以有多少个长连接?受到什么影响?linux最大文件句柄数量总结
Socket TCP Server一个端口可以有多少个长连接? 网上答案很多,不知道那个才是正确的 理论上是无限的 16.Linux中,一个端口能够接受tcp链接数量的理论上限是? A.1024 B. ...
- 27.Socket,TCP,UDP,HTTP基本通信原理
Socket,TCP,UDP,HTTP基本通信原理(摘自百度): TCP.UDP,HTTP 底层通信都是通过 socket 套接字实现 网络上不同的计算机,也可以通信,那么就得使用网络套接字(sock ...
随机推荐
- BFM1
BFM应该描述的是具有某种具体功能的电路.比如说,你的待测电路是一个智能卡,那他的BFM就是读卡器:那你就要根据协议,在BFM中描述出读卡器的具体行为. 写BFM就类似于写testbench了.BFM ...
- Jquery获得控件值的方法
一 Jquery获得服务器控件值的方法 由于ASP.NET网页运行后,服务器控件会随机生成客户端id,jquery获取时候不太好操作,google了下,总结有以下3种方法: 服务器控件代码:<a ...
- 学点css基础
中午时间学点css,附带http://www.w3cschool.cc/css/css-tutorial.html这个链接! 中午的时间学了这些东西!如下图: 附带代码: <!DOCTYPE h ...
- WPF 皮肤之MathApps.Metro UI库
在WPF中要想使用Metro风格是很简单的,可以自己画嘛.. 但是为了节省时间,哈,今天给大家推荐一款国外Metro风格的控件库. 本文只起到抛砖引玉的作用,有兴趣还是推荐大家上官网,Thanks,官 ...
- web.config详解(配置文件节点说明)
转载:http://www.zzzj.com/html/20081110/67614.html web.config文件是一个XML文件,它的根结点是<configuration>,在&l ...
- python tornado+mongodb的使用
tornado tar xvzf tornado-1.2.1.tar.gz cd tornado-1.2.1 python setup.py build sudo python setup.py in ...
- Object-C内存管理
Object-C的内存管理是基于引用计数的.你要做的事情只是关注你的引用,而释放内存的工作实际上由运行环境完成. 在最简单的情形中,你分配(alloc)的对象,或只是保留(retain)在一些地方的对 ...
- node.js 小爬虫 imooc 2016.03.06
爬虫目标:获取http://www.imooc.com/learn/348网页中的章节标题和视频信息. var http = require('http'); var cheerio = requir ...
- python-MySQLdb-练习
看完视频,自己练习一遍. 还是遇到问题,不过最终还是解决了.贴上完成的代码. CREATE TABLE `NewTable` ( `acctid` int(11) NOT NULL AUTO_INCR ...
- 10.14_魅族手机音乐播放无故暂停,MetroUICss-tile中的字如何居中
(1)魅族手机,播放音乐,无故暂停.不管是自带的音乐播放程序,还是下载的其他音乐播放器都是如此.而且,手机上有个Google服务耗电量非常高,会经常弹出登陆Google账号的弹出项. (2)Metro ...