C++ Socket TCP "Hello World!"
2016-10-03 06:46
323 查看
这是C++ SOCKET网络程序中的C/S结构之TCP "Hello World !",共两个控制台工程:
[cpp] view plain copy
print?
//////////////////////////////////////////////////////////////////////////
// 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;
}
[cpp] view plain copy
print?
//////////////////////////////////////////////////////////////////////////
// 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
[cpp] view plain copy
print?
//////////////////////////////////////////////////////////////////////////
// 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;
}
[cpp] view plain copy
print?
//////////////////////////////////////////////////////////////////////////
// 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 UDP "Hello World!"
- 【转】C++ Socket UDP "Hello World!"
- C++ Socket TCP "Hello World!"
- C++ Socket UDP "Hello World!"
- [OS] 用汇编语言编写一个Boot Sector显示"Hello world!" [李园7舍_404]
- SpringBoot的RabbitMQ消息队列: 二、第一模式"Hello World!"
- 学渣讲消息队列之RabbitMQ从敲门到入门(第二讲)—— "Hello World!"
- C++ "hello world‘实例
- SpringBoot的RabbitMQ消息队列: 二、第一模式"Hello World!"
- TCP和UDP的"保护消息边界"
- "Hello World!"团队第十次会议
- 通过"named pipe"方式或"TCP/IP"方式,测试本机MySQL客户端对本机MySQL服务器的连接通信
- Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" 各个节点意思
- Java in Eclipse: Hello World与java.lang.NoClassDefFoundError: Exception in thread "main" 问题
- TCP和UDP的"保护消息边界" (经典)
- "Hello World!"团队第四次会议
- linux c++ socket入门之tcp server端
- TCP和UDP的"保护消息边界" (经典)
- Qt提示 "Could not connect to AppWrapper, Please make sure TCP port 12005 is not blocked"解决方法
- 又见"神奇"的Hello World