服务端代码:
#include<winsock2.h>
#include<windows.h>
#include<iostream>
//#pragma comment(lib,"WS2_32.lib")
int main()
{
using namespace std;
WSADATA data;
WORD w = MAKEWORD(2,0);
char sz[]="欢迎你";
::WSAStartup (w,&data);
SOCKET s,s1;
s=::socket (AF_INET,SOCK_STREAM,0);
sockaddr_in addr,addr2;
int n=sizeof(addr2);
addr.sin_family =AF_INET;
addr.sin_port =htons(75);
addr.sin_addr .S_un .S_addr =INADDR_ANY;
::bind(s,(sockaddr*)&addr,sizeof(addr));
::listen (s,5);
cout<<"服务器已经启动"<<endl;
while(true)
{
s1=::accept (s,(sockaddr*)&addr2,&n);
if(s1!=NULL)
{
//for(s1!=NULL)
//{
cout<<"已经连接上"<<endl;
::send(s1,sz,sizeof(sz),0);
//cin>>sz;本来是想在这加个循环的,但是输入一次后,按回车就关闭程序了,
//}
}
::closesocket (s);
::closesocket (s1);
::WSACleanup ();
if(getchar())
{
return 0;
}
else
{
::Sleep (100);
}
}
}
客户端代码:
#include<winsock2.h>
#include<windows.h>
#include<iostream>
#pragma comment(lib,"WS2_32.lib")
int main()
{
using namespace std;
WSADATA data;
WORD w = MAKEWORD(2,0);
char sz[10]={0};
::WSAStartup (w,&data);
SOCKET s;
s=::socket (AF_INET,SOCK_STREAM,0);
sockaddr_in addr;
//int n=sizeof(addr2);
addr.sin_family =AF_INET;
addr.sin_port =htons(75);
addr.sin_addr .S_un .S_addr =inet_addr("127.0.0.1");
//::bind(s,(sockaddr*)&addr,sizeof(addr));
//::listen (s,5);
cout<<"客户端已经启动"<<endl;
::connect(s,(sockaddr*)&addr,sizeof(addr));
::recv(s,sz,sizeof(sz),0);
cout<<sz<<endl; ::closesocket (s);
// ::closesocket (s);
::WSACleanup ();
if(getchar())
{
return 0;
}
else
{
::Sleep (100);
}

}纯控制台,求帮忙

解决方案 »

  1.   

    s1=::accept (s,(sockaddr*)&addr2,&n);
    if(s1!=NULL)
    {
    //for(s1!=NULL)
    首先,addr.sin_port =htons(75);端口号要用1024以上的。
    其次,s1是SOCKET类型,不能与NULL比较的,改成s1!=INVALID_SOCKET
      

  2.   

    服务器
    发送改成
    cout<<"已经连接上"<<endl;
    while(sz[0] != '0')//0回车退出循环,或者别的方法
    {
    ::send(s1,sz,sizeof(sz),0);
    cin>>sz;//本来是想在这加个循环的,但是输入一次后,按回车就关闭程序了,
    }
    客户端的recv那地方也写成循环
      

  3.   

    楼主发一个QQ给我吧,我们聊聊,我也在做这样的东西我用的IOCP