首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

socket发送接收数据有关问题

2012-02-05 
socket发送接收数据问题服务器程序:voidmain(){SOCKETsocket1char*msg1 InitWinsock()//主要实现WS

socket发送接收数据问题
服务器程序:
void   main()
{
  SOCKET   socket1;
  char   *msg1= " ";
  InitWinsock();//主要实现WSAStartup()初始化的函数
  struct   sockaddr_in   local;
  local.sin_family=AF_INET;
  local.sin_port=htons(3490);   ///监听端口
  local.sin_addr.s_addr=INADDR_ANY;   ///本机
  memset(local.sin_zero,0,8);
  socket1=socket(AF_INET,SOCK_STREAM,0);
  int   bind_result   =   bind(socket1,(struct   sockaddr*)&local,sizeof(local));  
  int   nlisten   =   listen(socket1,   10);
  printf( "Listening......\n ");
  struct   sockaddr_in   their_addr;
  int   nSize   =   sizeof(their_addr);
  int   nNewFd   =   accept(socket1,   (struct   sockaddr*)&their_addr,   &nSize);
  printf( "Accepted!   IP:%s:   Port:%d\n ",   inet_ntoa(their_addr.sin_addr),   ntohs(their_addr.sin_port));

  recv(socket1,msg1,1024,0);//接收客户端发来的消息
  printf( "%s ",msg1);
  closesocket(socket1);
}

客户端程序:
void   main()
{
  SOCKET   socket1;
  char   *msg= "hello ";
  int   len,bytes_sentlen;
  len=strlen(msg);
  InitWinsock();
  struct   sockaddr_in   from;
  struct   sockaddr_in   local;
  local.sin_family   =   AF_INET;
  local.sin_port   =   htons(888);
  local.sin_addr.s_addr   =   INADDR_ANY;
  int   fromlen   =sizeof   (from);
  socket1   =   socket(AF_INET,SOCK_STREAM,0);
  int   nbind   =   bind(socket1,(struct   sockaddr*)&local,   sizeof(local));
  if   (nbind   <   0)
  {
printf( "error   bind ");
  }
  from.sin_family   =   AF_INET;
  from.sin_port   =   htons(3490);
  from.sin_addr.s_addr=inet_addr( "192.168.0.180 ");
  memset(from.sin_zero,   0,   8);
  int   nCon   =   connect(socket1,   (struct   sockaddr*)&   from,   sizeof   (from));
  if   (nCon   <   0)
  {
printf( "error   bind ");
}
bytes_sentlen=send(socket1,msg,len,0);//发送
closesocket(socket1);
}
运行后,在服务器那边不会显示hello,就是服务器的
recv(socket1,msg1,1024,0);//接收客户端发来的消息
没收到消息,怎么解决啊???

[解决办法]
recv(socket1,msg1,1024,0);//
----------------------------
recv(nNewFd,msg1,1024,0);//
[解决办法]
客户端和服务器端的 端口应该是一致的。。。
现在你的服务器端是:
local.sin_port=htons(3490); ///监听端口
客户端是:
local.sin_port = htons(888);
[解决办法]
int nNewFd = accept(socket1, (struct sockaddr*)&their_addr, &nSize);
也有问题,应该是这样。。。
socket nNewFd = accept(socket1, (struct sockaddr*)&their_addr, &nSize);

之后,还有就是在服务器端的接受数据的操作时:
recv(socket1,msg1,1024,0);
应该用
recv(nNewFd,msg1,1024,0);
[解决办法]
while (1)
{
char buf[BUFFER_SIZE];
socklen_t length = sizeof(cliaddr);


cliefd = accept(servfd,(struct sockaddr*)&cliaddr,&length);
if (cliefd < 0)
{
continue;
}
recv(.....);
}

热点排行