哪位能提供winsock2的能传东西的简单服务器/客户端源代码? 是用WSASocket,WSAAccept那些的。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 其实和用 socket、send、recv 等函数写的程序没有什么区别,这种例子很多。 怎么就没有人回复呢?winsock2真的很少用吗? 服务器端:#include <winsock2.h>#pragma comment(lib, "ws2_32.lib")#include <iostream.h>void main(){ int sock,sock_trs; struct sockaddr_in sa_s,sa_c; int sa_len; WSABUF MyData; char buffer[100]; DWORD a,b; OVERLAPPED Overlapped; sa_s.sin_addr.s_addr=htonl(INADDR_ANY); sa_s.sin_family=AF_INET; sa_s.sin_port=htons(6060); sa_len=sizeof(struct sockaddr_in); memset(buffer,0,sizeof(buffer)); MyData.len =100; MyData.buf =buffer; WSADATA wsaData; int nRet = WSAStartup(WINSOCK_VERSION, &wsaData); if(!nRet && wsaData.wVersion == WINSOCK_VERSION) sock=WSASocket(AF_INET,SOCK_STREAM,0,NULL,0,WSA_FLAG_OVERLAPPED); bind(sock,(struct sockaddr *)&sa_s,sa_len); listen(sock,5); if((sock_trs=WSAAccept(sock,(struct sockaddr *)&sa_c,&sa_len,NULL,0))==SOCKET_ERROR) cout<<"accept error"<<endl; else cout<<"accept ok"<<endl; if(WSARecv(sock_trs,&MyData,1,&a,0,&Overlapped,NULL)==SOCKET_ERROR)// if(recv(sock_trs,buffer,100,0)==SOCKET_ERROR) { cout<<"recv error"<<endl<<"error code:"<<WSAGetLastError()<<endl; } cout<<"Data Buffer:"<<buffer <<endl; for(b=0;b<1000000;b++) cout<<"";} 客户端:#include <winsock2.h>#pragma comment(lib, "ws2_32.lib")#include <iostream.h>//#include "defines.h"void main(){ WSABUF MyData; DWORD a,b; OVERLAPPED Overlapped; char msg[100]="abcdefg\0"; int sock,sock_trs; struct sockaddr_in sa_s,sa_c; int sa_len; sa_c.sin_addr.s_addr=inet_addr("127.0.0.1"); sa_c.sin_family=AF_INET; sa_c.sin_port=htons(6060); sa_len=sizeof(sa_c); MyData.buf =msg; MyData.len =strlen(msg);// cout<<MyData.buf <<endl; WSADATA wsaData; int nRet = WSAStartup(WINSOCK_VERSION, &wsaData); if(!nRet && wsaData.wVersion == WINSOCK_VERSION) sock=WSASocket(AF_INET,SOCK_STREAM,0,NULL,0,WSA_FLAG_OVERLAPPED); if(WSAConnect(sock,(struct sockaddr *)&sa_c,sa_len,0,0,0,0)==-1) cout<<"connect error"<<endl; if(WSASend(sock,&MyData,1,&a,0,&Overlapped,NULL)==SOCKET_ERROR)// if(send(sock,msg,100,0)==SOCKET_ERROR) { cout<<"send error"<<endl; cout<<"error code:"<<WSAGetLastError()<<endl; } for(b=0;b<1000000;b++) cout<<"";}但是WSASend(),WSARecv()函数使用还是有错,用send(),recv()就没有问题。谁能修改一下使WSASend(),WSARecv()可用? 可以吗?Client不用bind吗?我初学的,问一下,不用bind吗? 同一个消息,俩种不同的方式//有什么区别,何时会被调用呢? 请大家帮忙解决下这个问题,在此先谢过大家! 卖身,去哈尔滨发展,哈市的朋友帮我估个价 发布时出现“应用程序配置不正确”,头大!! vc写opclient 怎么获取服务器列表 请高手指点一个摩托罗拉笔试题 一个我想了通宵都不知道到错在那里的图形程序,希望各位帮忙看看.VC++API的............. SQL Server的问题 大家好,我是一个VC的初学者。我想问一个比较初级的问题。 怎么给分? . 高手才能回答的问题!!! OPenGL的問題,大狹幫忙啊。
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
#include <iostream.h>
void main()
{
int sock,sock_trs;
struct sockaddr_in sa_s,sa_c;
int sa_len;
WSABUF MyData;
char buffer[100];
DWORD a,b;
OVERLAPPED Overlapped;
sa_s.sin_addr.s_addr=htonl(INADDR_ANY);
sa_s.sin_family=AF_INET;
sa_s.sin_port=htons(6060);
sa_len=sizeof(struct sockaddr_in);
memset(buffer,0,sizeof(buffer)); MyData.len =100;
MyData.buf =buffer;
WSADATA wsaData; int nRet = WSAStartup(WINSOCK_VERSION, &wsaData);
if(!nRet && wsaData.wVersion == WINSOCK_VERSION)
sock=WSASocket(AF_INET,SOCK_STREAM,0,NULL,0,WSA_FLAG_OVERLAPPED);
bind(sock,(struct sockaddr *)&sa_s,sa_len);
listen(sock,5);
if((sock_trs=WSAAccept(sock,(struct sockaddr *)&sa_c,&sa_len,NULL,0))==SOCKET_ERROR)
cout<<"accept error"<<endl;
else
cout<<"accept ok"<<endl;
if(WSARecv(sock_trs,&MyData,1,&a,0,&Overlapped,NULL)==SOCKET_ERROR)
// if(recv(sock_trs,buffer,100,0)==SOCKET_ERROR)
{
cout<<"recv error"<<endl<<"error code:"<<WSAGetLastError()<<endl;
}
cout<<"Data Buffer:"<<buffer <<endl;
for(b=0;b<1000000;b++)
cout<<"";
} 客户端:
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
#include <iostream.h>
//#include "defines.h"void main()
{
WSABUF MyData;
DWORD a,b;
OVERLAPPED Overlapped;
char msg[100]="abcdefg\0";
int sock,sock_trs;
struct sockaddr_in sa_s,sa_c;
int sa_len;
sa_c.sin_addr.s_addr=inet_addr("127.0.0.1");
sa_c.sin_family=AF_INET;
sa_c.sin_port=htons(6060);
sa_len=sizeof(sa_c); MyData.buf =msg;
MyData.len =strlen(msg);
// cout<<MyData.buf <<endl; WSADATA wsaData;
int nRet = WSAStartup(WINSOCK_VERSION, &wsaData);
if(!nRet && wsaData.wVersion == WINSOCK_VERSION)
sock=WSASocket(AF_INET,SOCK_STREAM,0,NULL,0,WSA_FLAG_OVERLAPPED);
if(WSAConnect(sock,(struct sockaddr *)&sa_c,sa_len,0,0,0,0)==-1)
cout<<"connect error"<<endl;
if(WSASend(sock,&MyData,1,&a,0,&Overlapped,NULL)==SOCKET_ERROR)
// if(send(sock,msg,100,0)==SOCKET_ERROR)
{
cout<<"send error"<<endl;
cout<<"error code:"<<WSAGetLastError()<<endl;
}
for(b=0;b<1000000;b++)
cout<<"";
}
但是WSASend(),WSARecv()函数使用还是有错,用send(),recv()就没有问题。谁能修改一下使WSASend(),WSARecv()可用?
Client不用bind吗?
我初学的,问一下,不用bind吗?