当前位置:编程学习 > C/C++ >>

求winsocket编程的最简例子,C++的

要求放在任何一个集成环境中都可以编译通过:服务端和客户端分开吧,不需要额外的界面,编译成控制台就好
答案:

#include <winsock2.h>

#pragma comment(lib,"WS2_32.lib")

class CSockInit
{
public:
 CSockInit(BYTE minorVer=2,BYTE majorVer=2)
 {
  WSADATA wsaData;
  WORD sockVersion=MAKEWORD(minorVer,majorVer);
  if(::WSAStartup(sockVersion,&wsaData)!=0)
  {
   exit(0);
  }
 }
 ~CSockInit()
 {
  ::WSACleanup();
 }
};//先定义个类原来初始化WinSocket

 

//下面是服务器端的的程序

#include <stdio.h>
#include "CInitSock.h"

CSockInit sockInit;
int main()
{
 SOCKET sock=::socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
 if(sock==INVALID_SOCKET)
 {
  printf("Failed socket\n");
  return 0;
 }
 sockaddr_in sin;
 sin.sin_family=AF_INET;
 sin.sin_port=htons(4567);
 sin.sin_addr.S_un.S_addr=INADDR_ANY;
 if(::bind(sock,(sockaddr*)&sin,sizeof(sin))==SOCKET_ERROR)
 {
  printf("Failed bind\n");
  return 0;
 }
 char buf[1024]={0};
 sockaddr_in addr;
 int nlen=sizeof(addr);
 while (1)
 {
  int nRecv=recvfrom(sock,buf,1024,0,(sockaddr*)&addr,&nlen);
  if(nRecv>0)
  {
   buf[nRecv]='\0';
   printf("接收数据(%s):%s\n",::inet_ntoa(addr.sin_addr),buf);
  }
 }
 ::closesocket(sock);
}

 

//下面是客服端的程序。

 

#include <stdio.h>
#include "..\CInitSock.h"
CSockInit sockin;
void main()
{
 SOCKET s=::socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
 if(s==INVALID_SOCKET)
 {
  printf("Failed socket()\n");
  return ;
 }
 sockaddr_in addr;
 addr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
 addr.sin_family=AF_INET;
 addr.sin_port=htons(4567);
 char zstext[]="TCP server Demo!\r\n";
 while (1)
 {
  ::sendto(s,zstext,strlen(zstext),0,(sockaddr*)&addr,sizeof(addr));
  scanf("%s",zstext);
 }
}

 

这个是基于UDP/IP的。水平有点差,莫见怪,在win32平台上,Visual studio 上基本上都能运行,不用链接静态库的,只要你包含了第一个封装好了的头文件就可以了。

上一个:c++关于指针变量作为函数参数的编程题查错
下一个:编程怎么学才能学好?(C++)

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,