C++ TCP Server

来源:互联网 发布:中传女被害案 知乎 编辑:程序博客网 时间:2024/06/13 22:36


C++ TCP Server

用C++写网络程序需要winsock2.h这个头文件,还有添加一个ws2_32.lib的lib库.


VC++2005添加Lib库的方法
1 项目- Server属性- 配置属性- 连接器- 附加依赖项
2 #pragma  comment(lib,"ws2_32.lib")
3 查找ws2_32.lib文件项目- 添加现有项,将ws2_32.lib作为文件添加到项目中去

为了简单化,暂不进行错误处理
在创建sock之前先要初始化
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2),&wsaData);
创建套接字
SOCKET sockSrv = socket(AF_INET, SOCK_STREAM, 0);

AF_INET是address family internet的缩写
SOCKADDR_IN addrSrv;
SOCKADDR_IN结构包括地址簇,端口号,IP地址,填充位
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
INADDR_ANY表示不限制连接IP
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(1986);
创建TCP程序的步骤
bind(sockSrv,(SOCKADDR *) &addrSrv,sizeof(SOCKADDR));
listen(sockSrv,5);

htonl 是host to network long的缩写

一直等待客户端发送消息
while(true)
 { SOCKET sockConn = accept(sockSrv,(SOCKADDR *)&addrClient,&len);
  char sendBuf[100]="服务端发送给客户端";
  std::cout<<sendBuf<<endl;  
  send(sockConn,sendBuf,strlen(sendBuf)+1,0);
  char recvBuf[100];
  recv(sockConn,recvBuf,100,0);  
  std::cout<<recvBuf<<endl;
  closesocket(sockConn);
 }

sendBuf是发送给客户端的数据
recvBuf是接受的到的数据
完成源码
#include <Winsock2.h>
#include <iostream>.
#pragma  comment(lib,"ws2_32.lib")
using namespace std;
int main()
{
 WSADATA wsaData;
 WSAStartup(MAKEWORD(2,2),&wsaData);
 SOCKET sockSrv = socket(AF_INET, SOCK_STREAM,  0); 
    SOCKADDR_IN addrSrv;  
 addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
    addrSrv.sin_family = AF_INET;
 addrSrv.sin_port = htons(1986);
 cout<<htons(1986);
    bind(sockSrv,(SOCKADDR *) &addrSrv,sizeof(SOCKADDR));
    listen(sockSrv,5);
 SOCKADDR_IN addrClient;
 int len = sizeof(SOCKADDR);
 while(true)
 {
 SOCKET sockConn = accept(sockSrv,
 (SOCKADDR *) &addrClient,&len);
 char sendBuf[100]="服务端发送给客户端";
    std::cout<<sendBuf<<endl;
    send(sockConn,sendBuf,strlen(sendBuf)+1,0);
 char recvBuf[100];
 recv(sockConn,recvBuf,100,0);
    std::cout<<recvBuf<<endl;
 closesocket(sockConn);
 }
 return 0;
}
在VC++2005下调试通过


原文:http://blog.csdn.net/flyfish1986/article/details/3240814

原创粉丝点击