TcpServer和TcpClient

青乡 2011-06-03 11:15:11

//initsock.h
//初始化winsock2库

#include<winsock2.h>
#pragma comment(lib,"WS2_32")

class CInitSock
{
public:
CInitSock(BYTE minorVer=2,BYTE majorVer=2){
WSADATA wsaData;
WORD sockVersion=MAKEWORD(minorVer,majorVer);
if(WSAStartup(sockVersion,&wsaData)!=0){
exit(0);
}
}
~CInitSock(){
WSACleanup();
}
};




--------------------------------------------------------------------------------

以下创建2个项目:TcpServer和TcpClient


//TcpServer.cpp
#include "stdafx.h"
#include<stdio.h>
#include"initsock.h"

CInitSock initsock;//初始化winsock2库

int _tmain(int argc, _TCHAR* argv[])
{
//创建套接字
SOCKET sListen=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(sListen==INVALID_SOCKET){
printf("Failed socket()\n");
return 0;
}

//填充IP地址
sockaddr_in sin;
sin.sin_family=AF_INET;
sin.sin_port=htons(4567);
sin.sin_addr.S_un.S_addr=INADDR_ANY;

//把创建的套接字绑定到本地地址
if(bind(sListen,(LPSOCKADDR)&sin,sizeof(sin)==SOCKET_ERROR)){
printf("Failed bind()\n");
return 0;
}

//进入监听
if(listen(sListen,2)==SOCKET_ERROR){
printf("Failed listen()\n");
return 0;
}

//循环接受客户端的连接请求
sockaddr_in remoteAddr;
int nAddrLen=sizeof(remoteAddr);
SOCKET sClient;
char szText[]="Tcp Server Demo!\n";
while(TRUE){
//接受新的连接
sClient=accept(sListen,(SOCKADDR *)&remoteAddr,&nAddrLen);
if(sClient==INVALID_SOCKET){
printf("Failed accept()\n");
continue;
}
printf("接收到一个连接:%s\n",inet_ntoa(remoteAddr.sin_addr));
//向客户端发送数据
send(sClient,szText,strlen(szText),0);
//关闭同客户端的连接
closesocket(sClient);
}

//关闭监听套接字
closesocket(sListen);
return 0;
}




//TcpClient.cpp
#include "stdafx.h"
#include"initsock.h"
#include<stdio.h>

CInitSock initsock;//初始化winsock2库

int _tmain(int argc, _TCHAR* argv[])
{
//创建套接字
SOCKET s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(s==INVALID_SOCKET){
printf("Failed socket()\n");
return 0;
}

//填充地址信息
sockaddr_in servAddr;
servAddr.sin_family=AF_INET;
servAddr.sin_port=htons(4567);
servAddr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
if(connect(s,(sockaddr *)&servAddr,sizeof(servAddr))==-1){
printf("Failed connect()\n");
return 0;
}

//接收数据
char buff[256];
int nRecv=recv(s,buff,256,0);
if(nRecv>0){
buff[nRecv]='\0';
printf("接收数据:%s",buff);
}

//关闭套接字
closesocket(s);
return 0;
}

----------------------------------------------------------------------------------


运行后,分别出现错误结果:
Failed bind()
请按任意键继续. . .


Failed connect()
请按任意键继续. . .



不解??谢谢~


...全文
121 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
青乡 2011-06-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dream238 的回复:]
if(bind(sListen,(LPSOCKADDR)&sin,sizeof(sin)==SOCKET_ERROR)) ???
应该是if(bind(sListen,(LPSOCKADDR)&sin,sizeof(sin))==SOCKET_ERROR)
只有bind成功listen了,才能connect上
[/Quote]

谢谢您~

我改了之后还是那个错误,不知道是什么原因……
许文君 2011-06-04
  • 打赏
  • 举报
回复
sin.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
许文君 2011-06-04
  • 打赏
  • 举报
回复
printf("Failed bind(),the err code is %d\n",WSAGetLastError());
打印看下错误代码是什么
ArcRain 2011-06-03
  • 打赏
  • 举报
回复
if(bind(sListen,(LPSOCKADDR)&sin,sizeof(sin)==SOCKET_ERROR)) ???
应该是if(bind(sListen,(LPSOCKADDR)&sin,sizeof(sin))==SOCKET_ERROR)
只有bind成功listen了,才能connect上

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧