别摸我的键盘 的学生作业:
代码
#include
#include
#include
#include /* See NOTES */
#include
#include
#include
#include
#include
#include
#include
#define FILE_SZ 64
void write_file(const char *name){
int ret,fd;
char buf[FILE_SZ] = "hello udp\n";
fd = open(name,O_WRONLY|O_CREAT|O_TRUNC,0644);
if(-1 == fd){
perror("[ERROR] open()");
exit(EXIT_FAILURE);
}
ret = write(fd, buf, strlen(buf));
if(-1 == ret){
perror("[ERROR] write()");
exit(EXIT_FAILURE);
}
close(fd);
}
void read_file(const char *fname, const char * buf){
int ret,fd;
fd = open(fname,O_RDONLY);
if(-1 == fd){
perror("[ERROR] open()");
exit(EXIT_FAILURE);
}
ret = read(fd, (void *)buf, FILE_SZ);
if(-1 == ret){
perror("[ERROR] read()");
exit(EXIT_FAILURE);
}
close(fd);
}
int main(int argc, const char *argv[])
{
if(argc != 3){
fprintf(stderr, "[ERROR] %s \n", argv[0]);
exit(EXIT_FAILURE);
}
int socket_fd;
char fname[] = "log.txt";
struct sockaddr_in addr_in;
char buf[FILE_SZ] = {0};
ssize_t sz;
socket_fd = socket(AF_INET, SOCK_DGRAM, 0);
if(socket_fd == -1){
perror("[ERROR] socket()");
exit(EXIT_FAILURE);
}
addr_in.sin_family = AF_INET;
addr_in.sin_port = htons(atoi(argv[2]));
addr_in.sin_addr.s_addr = inet_addr(argv[1]);
write_file(fname);
read_file(fname, buf);
#if 0
printf("buf content is %s", buf);
#endif
sz = sendto(socket_fd, (const void *)buf, strlen(buf), 0, (const struct sockaddr *)&addr_in, sizeof(struct sockaddr_in));
if(-1 == sz){
perror("[ERROR] sendto()");
exit(EXIT_FAILURE);
}
close(socket_fd);
return 0;
}
发送结果【图片】