服务端代码:
#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);
}
}纯控制台,求帮忙
#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);
}
}纯控制台,求帮忙
if(s1!=NULL)
{
//for(s1!=NULL)
首先,addr.sin_port =htons(75);端口号要用1024以上的。
其次,s1是SOCKET类型,不能与NULL比较的,改成s1!=INVALID_SOCKET
发送改成
cout<<"已经连接上"<<endl;
while(sz[0] != '0')//0回车退出循环,或者别的方法
{
::send(s1,sz,sizeof(sz),0);
cin>>sz;//本来是想在这加个循环的,但是输入一次后,按回车就关闭程序了,
}
客户端的recv那地方也写成循环