Client:
#include <stdio.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <errno.h>
#include <string.h>
#define SRV_PORT 9527
#define MAX_BUF_LEN 1024
void do_job(int);
int main(int argc, char **argv)
{
int listenfd, connfd;
pid_t child_pid;
struct sockaddr_in srv_addr, cli_addr;
int cli_len;
printf("Hello, I'm client!\r\n");
listenfd = socket(AF_INET, SOCK_STREAM, 0);
if (listenfd == 0)
{
printf("socket fail, err(%s)\n", strerror(errno));
return -1;
}
bzero(&srv_addr, sizeof(struct sockaddr_in));
srv_addr.sin_family = AF_INET;
srv_addr.sin_port = htons(SRV_PORT);
inet_pton(AF_INET, "135.2.51.5", &srv_addr.sin_addr);
connect(listenfd, (struct sockaddr *)&srv_addr, sizeof(srv_addr));
do_job(listenfd);
return 0;
}
void do_job(int fd)
{
char *buf = "I'm client";
char buf2[MAX_BUF_LEN];
ssize_t len;
bzero(buf2, MAX_BUF_LEN);
if (0 > write(fd, "I'm client", strlen(buf)+1))
{
printf("write failed\n");
return;
}
if (-1 == read(fd, buf2, MAX_BUF_LEN))
{
printf("read failed]\n");
return;
}
close(fd);
printf("read from server:%s",buf2);
}
Server:
#include <stdio.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <errno.h>
#include <string.h>
#define SRV_PORT 9527
#define LISTEN_LEN 5
#define MAX_BUF_LEN 1024
void do_job(int);
int main(int argc, char **argv)
{
int listenfd, connfd;
pid_t child_pid;
struct sockaddr_in srv_addr, cli_addr;
int cli_len;
printf("Hello, I'm server!\r\n");
listenfd = socket(AF_INET, SOCK_STREAM, 0);
if (listenfd == 0)
{
printf("socket fail, err(%s)\n", strerror(errno));
return -1;
}
bzero(&srv_addr, sizeof(struct sockaddr_in));
srv_addr.sin_family = AF_INET;
srv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
srv_addr.sin_port = htons(SRV_PORT);
if (0 != bind(listenfd, (struct sockaddr*)&srv_addr, sizeof(srv_addr)))
{
printf("bind fail, err(%s)\n", strerror(errno));
close(listenfd);
return -1;
}
if (0 != listen(listenfd, LISTEN_LEN))
{
printf("listen fail, err(%s)\n", strerror(errno));
close(listenfd);
return -1;
}
while (1)
{
connfd = accept(listenfd, (struct sockaddr*)&cli_addr, &cli_len);
if (-1 == connfd)
{
printf("accept fail, err(%s)\n", strerror(errno));
close(listenfd);
return -1;
}
if ((child_pid = fork()) == 0)
{
close(listenfd);
do_job(connfd);
//close(connfd);
exit(0);
}
close(connfd);
}
return 0;
}
void do_job(int fd)
{
char buf[MAX_BUF_LEN];
ssize_t len;
bzero(buf, MAX_BUF_LEN);
len = read(fd, buf, MAX_BUF_LEN);
if (len < 0)
{
printf("read failed\n");
return;
}
printf("recv from client:%s\n", buf);
if (-1 == write(fd, "hello, welcome to my server \r\n", 32))
{
printf("write failed]\n");
return;
}
}