- 论坛徽章:
- 0
|
[root@localhost ~]# cat /root/p/client.c
#include "unp.h"
int create_conn_socket(struct sockaddr_in *servaddr, char *serverIP);
void request(int sockfd, struct sockaddr_in *servaddr);
int main(int argc, char **argv)
{
int sockfd;
struct sockaddr_in servaddr;
if (argc != 2) {
fprintf(stderr, "Usage: ./p/client \r\n");
exit(1);
}
sockfd = create_conn_socket(&servaddr, argv[1]);
request(sockfd, &servaddr);
exit(0);
}
int create_conn_socket(struct sockaddr_in *servaddr, char *serverIP)
{
int sockfd;
if ((sockfd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1)
err_sys("socket");
bzero(servaddr, sizeof(*servaddr));
servaddr->sin_family = AF_INET;
servaddr->sin_port = htons(LISTENPORT);
if (inet_pton(AF_INET, serverIP, &servaddr->sin_addr) <= 0)
err_sys("inet_pton");
if (connect(sockfd, (SA *)servaddr, sizeof(*servaddr)) == -1)
err_sys("connect");
return sockfd;
}
void request(int sockfd, struct sockaddr_in *servaddr)
{
struct msghdr msg;
struct iovec iov[1];
char buf[BUFSIZ] = "hello china\r\n";
ssize_t n;
bzero(&msg, sizeof(msg));
msg.msg_name =
servaddr; /* attention this
is a pointer to void* type */
msg.msg_namelen = sizeof(*servaddr);
iov[0].iov_base = buf;
iov[0].iov_len = strlen(buf);
msg.msg_iov = iov;
msg.msg_iovlen = 1;
if (sendmsg(sockfd, &msg, 0) == -1)
err_sys("sendmsg");
bzero(buf, sizeof(buf));
if ((n = recv(sockfd, buf, sizeof(buf), 0)) == -1)
err_sys("recv");
else if (write(STDOUT_FILENO, buf, n) != n)
err_sys("write");
}
void err_sys(const char *errmsg)
{
perror(errmsg);
exit(1);
}
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/39758/showart_344252.html |
|