server
#include <sys/types.h>
#include <sys/socket.h>
#include <ctype.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
#define MAX_READ_MSG_LEN 4096
#define MAX_WRITE_MSG_LEN 4096
const short g_nConnectPort = 15623;
const char* g_szUserMsg="Hi,I'm server!";
typedef struct sockaddr SA;
typedef struct sockaddr_in SA4;
void do_work(int fd)
{
#if 1
int r,i;
char buf[MAX_READ_MSG_LEN];
r = read(fd,buf,MAX_READ_MSG_LEN);
write(1, buf, r);
write(fd, g_szUserMsg, MAX_WRITE_MSG_LEN);
#endif
return;
}
int main()
{
int s_fd;
int c_fd;
SA4 addr, cli;
pid_t pid;
s_fd = socket(AF_INET,SOCK_STREAM,0);
if(s_fd == -1)
{
perror("socket");
return -1;
}
addr.sin_family = AF_INET;
addr.sin_port = htons(g_nConnectPort);
addr.sin_addr.s_addr = htonl(INADDR_ANY);
int b = bind(s_fd, (SA*)&addr, sizeof(addr));
if(b == -1)
{
perror("bind");
return -1;
}
listen(s_fd, 5);
while(1)
{
int cli_len = sizeof(cli);
c_fd = accept(s_fd, (SA*)&cli, &cli_len);
if(c_fd == -1)
{
perror("accept");
return -1;
}
pid = fork();
if(pid == -1)
{
perror("fork");
return -1;
}
if(pid == 0)
{
close(s_fd);
while(1)
{
do_work(c_fd);
}
close(c_fd);
exit(0);
}else
{
close(c_fd);
waitpid(-1, NULL,WNOWAIT);
}
}
close(s_fd);
return 0;
}
client
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <ctype.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>
typedef struct sockaddr SA;
typedef struct sockaddr_in SA4;
int main(int argc, char *argv[]) {
SA4 serv;
char *msg = "lao wang\n";
char buf[128];
int r;
int s_fd = socket(AF_INET, SOCK_STREAM, 0);
if(s_fd == -1) {
perror("socket");
return -1;
}
serv.sin_family = AF_INET;
serv.sin_port = htons(15623);
inet_pton(AF_INET,argv[1],&serv.sin_addr);
int c = connect(s_fd, (SA*) &serv, sizeof(serv));
if(c == -1) {
perror("connect");
return -1;
}
write(s_fd,msg,strlen(msg));
r = read(s_fd, buf, 128);
write(1, buf, r);
close(s_fd);
return 0;
}