/*=====================================
*
*文件名:tcp_client.c
*
*文件描述:TCP循环服务器客户端
*
*作者:xue, 2012、07、26
*
*====================================*/
#include <stdio.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <time.h>
#include <string.h>
#define BUFFER 1024
#define PORT 7777
int main(int argc, char *argv[])
{
int client_sockfd;
struct sockaddr_in server_addr;
char buffer[BUFFER];
int len = sizeof (server_addr);
int rel;
int n;
client_sockfd = socket (AF_INET, SOCK_STREAM, 0);
if(client_sockfd < 0)
{
printf("sock error\n");
return -1;
}
bzero(&server_addr, sizeof (server_addr));
server_addr.sin_family= AF_INET;
server_addr.sin_port= htons (PORT);
server_addr.sin_addr.s_addr= htonl (INADDR_ANY);
rel =connect (client_sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr));
if(rel < 0)
{
printf("connect error\n");
return -1;
}
printf("wait for the server send someting to client\n");
while(1)
{
memset(buffer, 0, sizeof (buffer));
n =recv (client_sockfd, buffer, BUFFER, 0);
if(n > 0)
{
printf("recv data from server success!\n");
printf("server: %s\n", buffer);
}
memset(buffer, 0, sizeof (buffer));
printf("please input someting send to the server!\nclient:");
fgets(buffer, BUFFER, stdin);
if(!(strncmp (buffer, "quit", 4)))
{
printf("client request stop!\n");
break;
}
n = send (client_sockfd, buffer, strlen (buffer), 0);
if(n > 0)
{
printf("client send data to the server success!\n");
}
}
close(client_sockfd);
return 0;
}
/*=====================================
*
*文件名:tcp_server.c
*
*文件描述:TCP循环服务器服务器端
*
*作者:xue, 2012、07、26
*
*====================================*/
#include<stdio.h>
#include<stdlib.h>
#include<netinet/in.h>
#include<unistd.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<time.h>
#include<string.h>
#define BUFFER 1024
#define PORT 7777
int main(int argc, char *argv[])
{
int server_sockfd, client_sockfd;
struct sockaddr_in server_addr, client_addr;
char buffer[BUFFER];
int len = sizeof (client_addr);
int rel;
int n;
server_sockfd = socket (AF_INET, SOCK_STREAM, 0);
if(server_sockfd < 0)
{
printf("sock error\n");
return -1;
}
bzero(&server_addr, sizeof (server_addr));
server_addr.sin_family= AF_INET;
server_addr.sin_port= htons (PORT);
server_addr.sin_addr.s_addr= htonl (INADDR_ANY);
rel = bind (server_sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr));
if(rel < 0)
{
printf("bind error\n");
return -1;
}
rel =listen (server_sockfd, 5);
if(rel < 0)
{
printf("listen error\n");
return -1;
}
memset(buffer, 0, BUFFER);
while(1)
{
printf("wait the new client to connection!\n");
client_sockfd= accept(server_sockfd, (struct sockaddr *)&client_addr, &len);
if(client_sockfd > 0)
{
printf("server: got connection from %s, port : %d \n", inet_ntoa(client_addr.sin_addr), ntohs (client_addr.sin_port));
}
while(1)
{
memset(buffer, 0, sizeof (buffer));
printf("please input someting what you wan to send to the client.\nserver:");
fgets(buffer, BUFFER, stdin);
if(!(strncmp (buffer, "quit", 4)))
{
printf("server request stop!\n");
break;
}
n =send(client_sockfd, buffer, strlen(buffer), 0);
if(n > 0)
{
printf("server send to the client success! server send %d bytes to theclient %d!\n", n);
}
else
{
printf("server send data to the client falied!\n");
break;
}
n =recv (client_sockfd, buffer, BUFFER, 0);
if(n > 0)
{
printf("recv the data from the client!\nclient: %s", buffer);
}
else
{
printf("don't recv data from client!\n");
}
}
close(client_sockfd);
}
close(server_sockfd);
return0;
}
首先,编译后,先运行服务器server
[root@localhostlianxi]# ./server
waitthe new client to connection!
再运行客户端
[root@localhostlianxi]# ./client
waitfor the server send someting to client
接着就可以实现同步通信了。