免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1709 | 回复: 0
打印 上一主题 下一主题

[网络管理] 求助linux socket编程,结构体封装 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-30 13:27 |只看该作者 |倒序浏览
客服端
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <time.h>
#include <sys/time.h>
#include <sys/socket.h>
#include <arpa/inet.h>

#define  PORT   2080
struct msg_ntp
{
         int msg_type;
               unsigned long  org[2];
         unsigned long  rec[2];
        char   ntp_ip[16];
         };
int  constructpacket(char *packet,struct  msg_ntp ntpdata)
{
  memset(&packet[0],0,100);
  int k=sizeof(char);
  memcpy(&packet[0],&ntpdata.org[0],4);
  memcpy(&packet[4],&ntpdata.org[1],4);
  memcpy(&packet[8],&ntpdata.rec[0],4);
  memcpy(&packet[12],&ntpdata.rec[1],4);
  memcpy(&packet[16],&ntpdata.ntp_ip,16*k);
  return (16+16*k);
}
int main()
{
struct msg_ntp packetip;
int msgid,res=1,s,i;
char szc_temp[256];
  memset(szc_temp,0,100);
packetip.msg_type=1;
packetip.org[0]=123456789;
packetip.org[1]=234567890;
packetip.rec[0]=345678902;
packetip.rec[1]=456789032;
packetip.ntp_ip[16]="192.168.2.80";

  int packetlen=0;
  packetlen=constructpacket(szc_temp,packetip);
  


struct sockaddr_in server_addr;
int portno=PORT;
s=socket(PF_INET, SOCK_DGRAM,0);
if(s < 0)
   {
        perror("socket");
        return;
    }
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr = inet_addr("192.168.2.30");
server_addr.sin_port=htons(portno);
while(1)
{
i=sendto(s,szc_temp,packetlen,0,(struct sockaddr*)&server_addr,sizeof(server_addr));
if(i < 0)
   {
        perror("sendto");
        }
  else {
             sleep(5);
        }
  }
}


服务器
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <time.h>
#include <sys/time.h>
#include <sys/socket.h>
#include <arpa/inet.h>

void main()
{
  int  portno=2080,sin_size,i,k;
   
  struct sockaddr_in  server_addr,client;
  int s,packlen;
  pthread_t id1;
  k=sizeof(char);
  int n=1;
  char msg[100], iptable[16*k];
   ulong array[4];

   s=socket(PF_INET, SOCK_DGRAM,0);
  if(s < 0)
   {
        perror("socket");
        return;
    }
  bzero(&server_addr, sizeof(server_addr));
  server_addr.sin_family = AF_INET;
  server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
  server_addr.sin_port = htons(portno);
  if(bind(s,(struct  sockaddr *)&server_addr,sizeof(struct  sockaddr))==-1){
   perror("bind error");
   }
sin_size=sizeof(struct sockaddr_in);
  while(1){
   i=recvfrom(s,msg,100,0,(struct sockaddr*)&client,&sin_size);
   if(i<0)continue;
   else{
     
     memcpy((void *)&array[0],&msg[0],4);
     memcpy((void *)&array[1],&msg[4],4);
     memcpy((void *)&array[2],&msg[8],4);
     memcpy((void *)&array[3],&msg[12],4);
     memcpy((void *)&iptable,&msg[16],16*k);
     printf("%u,%u,%u,%u,%s\n",array[0],array[1],array[2],array[3],iptable);
     }
   }
close(s);
}


服务器显示

123456789,234567890,345678902,456789032,垤反h驼筐?
123456789,234567890,345678902,456789032,垤反h驼筐?
123456789,234567890,345678902,456789032,垤反h驼筐?
123456789,234567890,345678902,456789032,垤反h驼筐?
123456789,234567890,345678902,456789032,垤反h驼筐?
123456789,234567890,345678902,456789032,垤反h驼筐?
123456789,234567890,345678902,456789032,垤反h驼筐?
123456789,234567890,345678902,456789032,垤反h驼筐?
123456789,234567890,345678902,456789032,垤反h驼筐?
123456789,234567890,345678902,456789032,垤反h驼筐?
123456789,234567890,345678902,456789032,垤反h驼筐?
123456789,234567890,345678902,456789032,垤反h驼筐?
123456789,234567890,345678902,456789032,垤反h驼筐?
123456789,234567890,345678902,456789032,垤反h驼筐?
123456789,234567890,345678902,456789032,垤反h驼筐?
123456789,234567890,345678902,456789032,垤反h驼筐?
123456789,234567890,345678902,456789032,垤反h驼筐?
123456789,234567890,345678902,456789032,垤反h驼筐?
123456789,234567890,345678902,456789032,垤反h驼筐?
123456789,234567890,345678902,456789032,垤反h驼筐?
123456789,234567890,345678902,456789032,垤反h驼筐?
123456789,234567890,345678902,456789032,垤反h驼筐?
123456789,234567890,345678902,456789032,垤反h驼筐?


为什么显示的ip地址显示 垤反h驼筐?

请高人指点?
谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP