#include <arpa/inet.h>
#include <sys/socket.h>
#define TCP_SERVER_BIND_PORT 12000
void server_listen_thread_doing(void);
void server_recv_thread_doing(void);
static int server_sock_id;
static int new_server_sock_id;
static int client_sock_id;
static int server_listen_thread_id=0;
static int server_recv_thread_id=0;
void server_listen_thread_doing(void)
{
struct sockaddr_in client_addr;
int size =sizeof(client_addr);
new_server_sock_id= accept(server_sock_id, (struct sockaddr *) &client_addr, &size );
if(new_server_sock_id <0)
printf("accept error/n");
else
pthread_create(&server_recv_thread_id,0,server_recv_thread_doing,0);
}
void server_recv_thread_doing(void)
{
char data[1024];
while(1)
{
if(recv(new_server_sock_id,data,1024,0)>0)
printf("recv data:%s/n",data);
}
}
void server_start(void)
{
int bind_port =TCP_SERVER_BIND_PORT ;
struct sockaddr_in serv_addr;
server_sock_id= socket(AF_INET, SOCK_STREAM, 0);
if(server_sock_id<0)
printf("create server socket error/n");
memset(&serv_addr, 0,sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(bind_port);
serv_addr.sin_addr.s_addr = INADDR_ANY;
if (bind(server_sock_id, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
{
printf("error server bind/n");
}
listen(server_sock_id,5);
pthread_create(&server_listen_thread_id,0,server_listen_thread_doing,0);
//server_listen_thread_doing();
}
void client_start(void)
{
client_sock_id= socket(AF_INET, SOCK_STREAM, 0);
}
void client_connect(void)
{
struct sockaddr_in remote_addr;
struct in_addr remote_ip;
unsigned int remote_port =TCP_SERVER_BIND_PORT ;
inet_aton("127.0.0.1",&remote_ip);
remote_addr.sin_family = AF_INET;
remote_addr.sin_addr =remote_ip;
remote_addr.sin_port = htons(remote_port );
if (connect(client_sock_id,(struct sockaddr*)&remote_addr,sizeof(remote_addr)) < 0)
printf("connect error/n");
else
printf("connect ok/n");
}
void main(void)
{
char data[200];
server_start();
client_start();
//sleep(2);
client_connect();
while(1)
{
scanf("%s",data);
printf("data is:%s/n",data);
send(client_sock_id,data,1024,0);
}
}