- 论坛徽章:
- 0
|
求助各位前辈个问题,小弟学些linux C语言,总计些了一个给予UDP的发送和接收端,发送和接收的数据是一个结构体,但是接收端接收不到结构体中的字符串成员,想来很久,也没有找出问题,麻烦各位前辈帮忙看看,帮助下我这个纯新手。
接收端代码如下:
#include"include.h"
#define port 9999
#define LENGTH 1024
struct str
{
int type;
char buff[LENGTH];
};
void rcv(int sock)
{
struct sockaddr_in addr;
int length,n;
int running=1;
struct str frame;
char buffer[2000];
while(running)
{
bzero(&frame,sizeof(struct str));
length=sizeof(struct sockaddr);
n=recvfrom(sock,(struct str*)&frame,LENGTH,0,(struct sockaddr *)&addr,&length);
//memcpy(&frame,buffer,sizeof(struct str));
printf("Server has recieved %s !\n",frame.buff);
puts(frame.buff);
printf("Server has recieved sending type %d !\n",frame.type);
}
}
int main(void)
{
int sock_fd;
struct sockaddr_in addr;
if((sock_fd=socket(AF_INET,SOCK_DGRAM,0))<0)
{
printf("Error in socket!\n");
exit(1);
}
bzero(&addr,sizeof(struct sockaddr_in));
addr.sin_family=AF_INET;
addr.sin_addr.s_addr=htonl(INADDR_ANY);
addr.sin_port=htons(port);
if(bind(sock_fd,(struct sockaddr *)&addr,sizeof(struct sockaddr_in))<0)
{
printf("Error in bind!\n");
exit(1);
}
rcv(sock_fd);
close(sock_fd);
}
发送端代码如下:
#include"include.h"
#define port 9999
#define LENGTH 1024
struct str
{
int type;
int buff[LENGTH];
};
void snd(int sock)
{
int n;
struct sockaddr_in addr;
struct str frame;
char ipaddr[15];
int running=1;
char content[1200];
while(running)
{
bzero(&frame,sizeof(struct str));
bzero(&addr,sizeof(struct sockaddr_in));
addr.sin_family=AF_INET;
addr.sin_port=htons(port);
printf("please input the ip address!\n");
gets(ipaddr);
if(inet_aton(ipaddr,&addr.sin_addr)<0)
{
printf("Ip error!\n");
exit(1);
}
frame.type=5;
printf("please input the content which you wanna send!\n");
fgets((&frame)->buff,LENGTH,stdin);
printf("aim ip is ");
puts(ipaddr);
printf("the content you wanna send is %s !\n",(&frame)->buff);
printf("type is %d!\n",frame.type);
n=sendto(sock,(struct str *)&frame,sizeof(&frame),0,(struct sockaddr *)&addr,sizeof(struct sockaddr_in));
if(n<0)
{
printf("fail in sendto()\n");
exit(1);
}
bzero(&frame,sizeof(struct str));
}
}
int main(void)
{
int sock_fd;
if((sock_fd=(socket(AF_INET,SOCK_DGRAM,0)))<0)
{
printf("Error in socket()!\n");
exit(1);
}
snd(sock_fd);
close(sock_fd);
} |
|