请教KXY等高手,在VC下,如何编写控制台方式的SOCKET通讯程序?!

longchengdong 2000-09-04 12:36:00
KEY:
我想在VC下编写一个控制台方式的SOCKET通讯程序(类似于WIN2000下的TELNET客户端程序)如何保证可以收到SOCKET消息?
...全文
153 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
meifen 2001-07-13
  • 打赏
  • 举报
回复
4
oldworm 2000-09-07
  • 打赏
  • 举报
回复
控制台程序并没有说不能使用MFC呀,完全可以使用嘛,当然另外一条路就是windoze所指的。
Kevin_qing 2000-09-07
  • 打赏
  • 举报
回复
用API方式编

//sever Application
#include "stdafx.h"
#include "winsock2.h"
SOCKET sock;
sockaddr_in addr;
int nSockErr;
int main(int argc, char* argv[])
{
WSADATA wsadata;
int result;
if(WSAStartup(MAKEWORD(2,0),&wsadata))
{
MessageBox(NULL,"Your system does not support WinSocket2!","Error!",MB_OK);
return -1;
}
if(wsadata.wVersion!=MAKEWORD(2,0))
{
MessageBox(NULL,"Your system does not support WinSocket2!","Error!",MB_OK);
WSACleanup();
return -2;
}
if((sock=socket(AF_INET,SOCK_STREAM,0))<0)
MessageBox(NULL,"Create socket error!","Error!",MB_OK);
addr.sin_family=AF_INET;
addr.sin_port=htons(8080);
addr.sin_addr.s_addr=INADDR_ANY;

result=bind(sock,(sockaddr*)&addr,sizeof(addr));
if(result)
return -1;
printf("%d\n",result);
result=listen(sock,SOMAXCONN);
if(result==SOCKET_ERROR)
return -1;
printf("%d\n",result);
sockaddr adr;
int len;
// WaitForSingleObject((HANDLE)sock,-1);
len=sizeof(adr);
while(1)
{
result=accept(sock,&adr,&len);
printf("%d\n",result);
/* char buf[4096];
buf[recv(sock,buf,4096,0)]=0;
*/
if(result==INVALID_SOCKET)
getchar();
/*if(!result)
return;*/
}
printf("Hello World!\n");
getchar();
WSACleanup();
return ;
}

#include "stdafx.h"
#include "winsock2.h"
SOCKET sock;
sockaddr_in svr;
int nSockErr;
void SocketError(int no)
{
switch(no)
{
case WSA_IO_INCOMPLETE:
MessageBox(NULL,"Overlapped I/O event object not in signaled state. ","Socket Error!",MB_OK);
return;
/* case a:
MessageBox(NULL,"A socket operation was attempted to an unreachable host. See WSAENETUNREACH","Socket Error!",MB_OK);*/
}
}


//CLIENT

int main(int argc, char* argv[])
{
WSADATA wsadata;
int result=0;
if(WSAStartup(MAKEWORD(2,0),&wsadata))
{
MessageBox(NULL,"Your system does not support WinSocket2!","Error!",MB_OK);
return -1;
}
if(wsadata.wVersion!=MAKEWORD(2,0))
{
MessageBox(NULL,"Your system does not support WinSocket2!","Error!",MB_OK);
WSACleanup();
return -2;
}
/* sock=socket(AF_INET,SOCK_STREAM,0);
addr.sin_family=AF_INET;
addr.sin_port=htons(0);
addr.sin_addr.s_addr=INADDR_ANY;

result=bind(sock,(sockaddr*)&addr,sizeof(addr));
printf("%d\n",result);
if(result)
return -1;*/
HOSTENT *a=gethostbyname("localhost");
memcpy(&(svr.sin_addr),a->h_addr_list,a->h_length);
svr.sin_family=a->h_addrtype;
svr.sin_port=htons(8080);
sock=socket(AF_INET,SOCK_STREAM,0);
if(sock<0)
{
MessageBox(NULL,"Error open scoket!\n","Error",MB_OK);
return 0;
}

while(1)
{
if (connect(sock,(struct sockaddr*)&svr,sizeof(svr))==SOCKET_ERROR)
{
int i;
printf("%d\n",i=WSAGetLastError());
SocketError(i);
}

getchar();
};


int len;
result=connect(sock,(sockaddr*)&svr,sizeof(svr));
printf("%d\n",result);
getchar();
}
windoze 2000-09-07
  • 打赏
  • 举报
回复
你直接用connect、bind、socket这些函数不就行了?每一本TCP/IP的书上都有说明的,反正你在控制台程序里也没办法用大部分MFC的类。

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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