数据发送问题

candlelight 2006-03-04 10:49:27
兄弟我刚学网络编程,写了一个简单的server和client
可是就是不能正确的发送数据
现贴程序如下,望有达人相助咯,小弟感激不尽!
sever:
#include "stdio.h"
#include "Winsock2.h"
#pragma comment(lib,"ws2_32.lib")
main()
{
WSADATA wsadata;
WORD Version;
Version=MAKEWORD(2,2);
int iPort=6000;
int sendstatus;
struct sockaddr_in ServerAddr;
char *msg="Welcome to this server!";
char *IP;
int len;
int con;
SOCKET sock2;
con=0;
len=strlen(msg);
ServerAddr.sin_family=AF_INET;
ServerAddr.sin_port=::htons(u_short(iPort));
ServerAddr.sin_addr.s_addr=::inet_addr("10.1.2.2");

if(::WSAStartup(Version,&wsadata)!=0)
{
printf("WSAStarup faild!\n");
}
SOCKET sock1;
sock1=::socket(AF_INET,SOCK_STREAM,0);
::bind(sock1,(struct sockaddr *)&ServerAddr,sizeof(ServerAddr));
int err=::listen(sock1,10);
if(err!=0)
{
printf("listen error!\n");
}
else
{
printf("server is listening now.....\n");
struct sockaddr_in ClientAddr;
int addrlen;
addrlen=sizeof(ClientAddr);
if(sock2=::accept(sock1,(struct sockaddr *)&ClientAddr,&addrlen)==INVALID_SOCKET)
printf("Connection error!\n");
else
printf("have %d connected\n",++con);
printf("The client IP is %s\n",inet_ntoa(ClientAddr.sin_addr));
sendstatus=send(sock2,msg,len,0);
if(sendstatus==len)
printf("send data suceess!\n");
else
printf("send data error!\n");
closesocket(sock2);
}
getchar();
getchar();
closesocket(sock1);
WSACleanup();
}
client:
#include "stdio.h"
#include "Winsock2.h"
#pragma comment(lib,"ws2_32.lib")
main()
{
WSADATA wsadata;
WORD Version=MAKEWORD(2,2);
int iPort=6000;
int len;
char *msg;
if(::WSAStartup(Version,&wsadata)!=0)
printf("WSAStartup faild!");
struct sockaddr_in ServerAddr;
ServerAddr.sin_family=AF_INET;
ServerAddr.sin_addr.s_addr=::inet_addr("10.1.2.2");
ServerAddr.sin_port=::htons(u_short(iPort));
SOCKET client;
client=::socket(AF_INET,SOCK_STREAM,0);
::bind(client,(struct sockaddr *)&ServerAddr,sizeof(ServerAddr));
if(::connect(client ,(struct sockaddr *)&ServerAddr,sizeof(ServerAddr))==SOCKET_ERROR)
printf("connect error!");
else
{
len=recv(client,msg,24,0);
if(len<0)
{
printf("error!\n");
return 0;
}
else
printf("%s",*msg);
}
WSACleanup();
return 0;
getchar();
getchar();
}





...全文
72 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
nuaawenlin 2006-03-05
  • 打赏
  • 举报
回复
int addrlen = sizeof(ClientAddr);
CSDNWW 2006-03-05
  • 打赏
  • 举报
回复
client:
#include "stdio.h"
#include "Winsock2.h"
#pragma comment(lib,"ws2_32.lib")
main()
{
WSADATA wsadata;
WORD Version=MAKEWORD(2,2);
int iPort=8200;
int len;
char *msg = new char[100];
memset(msg, 0, 100);
if(::WSAStartup(Version,&wsadata)!=0)
printf("WSAStartup faild!");
struct sockaddr_in ServerAddr;
ServerAddr.sin_family=AF_INET;
ServerAddr.sin_addr.s_addr=::inet_addr("127.0.0.1");
ServerAddr.sin_port=::htons(u_short(iPort));
SOCKET client;
client=::socket(AF_INET,SOCK_STREAM,0);
::bind(client,(struct sockaddr *)&ServerAddr,sizeof(ServerAddr));
if(::connect(client ,(struct sockaddr *)&ServerAddr,sizeof(ServerAddr))==SOCKET_ERROR)
printf("connect error!");
else
{
len=recv(client,msg,24,0);
if(len<0)
{
printf("error!\n");
return 0;
}
else
printf("%s",msg);
}
closesocket(client);
WSACleanup();
getchar();
getchar();
return 0;
}


把上面程序直接运行就好了.
CSDNWW 2006-03-05
  • 打赏
  • 举报
回复
server:

#include "stdio.h"
#include "Winsock2.h"
#pragma comment(lib,"ws2_32.lib")
main()
{
WSADATA wsadata;
WORD Version;
Version=MAKEWORD(2,2);
int iPort=8200;
int sendstatus;
struct sockaddr_in ServerAddr;
char *msg="Welcome to this server!";
char *IP;
int len;
int con;

con=0;
len=strlen(msg);
ServerAddr.sin_family=AF_INET;
ServerAddr.sin_port=::htons(u_short(iPort));
ServerAddr.sin_addr.s_addr=::inet_addr("127.0.0.1");

if(::WSAStartup(Version,&wsadata)!=0)
{
printf("WSAStarup faild!\n");
}
SOCKET sock1;
SOCKET sock2;
int tt;
sock1=::socket(AF_INET,SOCK_STREAM,0);
::bind(sock1,(struct sockaddr *)&ServerAddr,sizeof(ServerAddr));
tt = WSAGetLastError();
int err=::listen(sock1,10);
tt = WSAGetLastError();
if(err!=0)
{
printf("listen error!\n");
}
else
{
printf("server is listening now.....\n");
SOCKADDR_IN ClientAddr;
int addrlen;
addrlen=sizeof(SOCKADDR_IN);
tt = WSAGetLastError();
if ((sock2=::accept(sock1,(LPSOCKADDR)&ClientAddr,&addrlen))==INVALID_SOCKET)
printf("Connection error!\n");
else
printf("have %d connected\n",++con);
printf("The client IP is %s\n",inet_ntoa(ClientAddr.sin_addr));

if (sock2 == SOCKET_ERROR)
printf("Connection error 2!\n");
sendstatus=::send(sock2,msg,len,0);


if(sendstatus==len)
printf("send data suceess!\n");
else
printf("send data error!\n");

}
getchar();
getchar();
closesocket(sock2);
closesocket(sock1);
WSACleanup();
}
candlelight 2006-03-05
  • 打赏
  • 举报
回复
就是客户端虽然能够连上server
但是server发送的欢迎消息不正正确发送哈
send函数返回的长度跟缓冲区长度不一样哈
在客户端根本就不能接受到任何数据
我知道是在server发送数据的时候出了问题
可是不晓得具体错在那里啊
望赐教!
CSDNWW 2006-03-05
  • 打赏
  • 举报
回复
具体怎么错?

18,357

社区成员

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

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