TCPServer.c
#include <stdio.h>
#include <stdlib.h> // exit
#include <string.h> // bzero
#include <sys/socket.h> // socket
#include <netinet/in.h> // struct sockaddr_in
#define PORT 0x6666
#define SERVERIP "127.0.0.1"
#define MAXQUEUE 100
#define MAXBUF 4096
void err_exit(char *p)
{
printf("error occured during %s\n", p);
exit(1);
}
int main()
{
int sockfd, clientfd, n, mark;
socklen_t clientlen;
struct sockaddr_in server, client;
char recvbuf[MAXBUF], sendbuf[MAXBUF];
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
err_exit("socket");
bzero(&server, sizeof(server));
server.sin_family = AF_INET;
server.sin_port = htons(PORT);
server.sin_addr.s_addr = inet_addr(SERVERIP);
if ((n = bind(sockfd, (struct sockaddr *)&server, (socklen_t)sizeof(server))) < 0)
err_exit("bind");
if ((n = listen(sockfd, MAXQUEUE)) < 0)
err_exit("listen");
printf("server started!\n");
mark = 0;
while (1)
{
if (mark == 0)
{
clientlen = sizeof(client);
bzero(&client, sizeof(client));
if ((clientfd = accept(sockfd, (struct sockaddr *)&client, &clientlen)) < 0 )
err_exit("accept");
mark = 1; // single process, only support one client
}
if ((n = recv(clientfd, recvbuf, MAXBUF, 0)) < 0)
err_exit("recv");
printf("\nrecv from client:\n\t%s", recvbuf);
printf("\nInput a message send to client:\n\t");
gets(sendbuf);
if ((n = send(clientfd, sendbuf, sizeof(sendbuf), 0)) < 0)
err_exit("send");
}
exit(0);
}
TCPClient.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define PORT 0x6666
#define SERVERIP "127.0.0.1"
#define MAXBUF 4096
void err_exit(const char *p)
{
printf("error occured during %s\n", p);
exit(1);
}
int main()
{
int n, sockfd;
struct sockaddr_in servaddr;
char recvbuf[MAXBUF], sendbuf[MAXBUF];
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
err_exit("socket");
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(PORT);
servaddr.sin_addr.s_addr = inet_addr(SERVERIP);
if ((n = connect(sockfd, (struct sockaddr *)&servaddr, (socklen_t)sizeof(servaddr))) < 0)
err_exit("connect");
while (1)
{
printf("\nInput a string send to server:\n\t");
gets(sendbuf);
if ((n = send(sockfd, sendbuf, MAXBUF, 0)) < 0)
err_exit("send");
if ((n = recv(sockfd, recvbuf, MAXBUF, 0)) < 0)
err_exit("recv");
printf("\nrecv from server:\n\t%s", recvbuf);
}
exit(0);
}