- 论坛徽章:
- 0
|
使用数据报socket进行网络通信,服务器端无问题,但客服端接受服务端信息后,用write打印信息出现“bad address”错误,而用puts打印不会,为啥?代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <errno.h>
#include <string.h>
#define oops(s,x) { perror(s); exit(x); }
#define BUFLEN 128
#define MY_PORT 80
int main(int ac, char *av[])
{
int sock; /* receive requests here */
int fd;
struct sockaddr_in myaddr; /* get caller id here */
socklen_t addrlen;
char buf[BUFLEN];
int msglen;
int ret;
if ( ac != 1 ){
fprintf(stderr,"usage: %s sockname\n", *av);
exit(1);
}
/* ----------------*/
/* get a socket */
/* ----------------*/
sock = socket(PF_INET, SOCK_DGRAM, 0); /* note PF_UNIX */
if ( sock == -1 )
oops("socket",2);
printf("have a socket: %d\n", sock);
/* ------------------------------------*/
/* make an address for server */
/* ------------------------------------*/
myaddr.sin_family = AF_INET;
inet_pton(AF_INET,"127.0.0.1",&myaddr.sin_addr);
myaddr.sin_port=htons(MY_PORT); /* note AF_UNIX */
/* ----------------- *
* connect to server *
* ----------------- */
ret = sendto(sock,NULL,0,0,(struct sockaddr*)&myaddr,sizeof(struct sockaddr_in));
if ( ret != -1 ){
printf("Connectd at sock %d\n", sock);
if(recvfrom(sock,buf,msglen,0,NULL,NULL)==-1)
oops("recvfrom",4);
//after executing the system call write,error "write bad address" would be printed.However,while using puts in replace of write,not any error would be printed.why?
//if (write(1, buf, msglen)==-1)
// oops("write",9);
puts(buf); } else oops("sendto",3);
return 0;
}
|
|