server和client写在一起,双向通信。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <pthread.h>
#include <unistd.h>
using namespace std;
#define MAXDATASIZE 1024
#define IP "127.0.0.1"
int send_head_port;
int send_tail_port;
int recv_tail_port;
pthread_t rec_head_thread, rec_tail_thread, send_tail_thread;
char my_ip[16];
char server_head_ip[16];
char server_tail_ip[16];
void init_client();
void *send_head_server(void *args);
void *recv_tail_server(void *args);
void *send_head_server(void *args)
{
int sockfd;
struct sockaddr_in sin_addr;
bzero(&sin_addr, sizeof(sin_addr));
sin_addr.sin_family = AF_INET;
sin_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
sin_addr.sin_port = htons(send_tail_port);
int sin_len = sizeof(sin_addr);
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
{
printf("Error opening socket\n");
exit(1);
}
while (1)
{
char msg[MAXDATASIZE];
scanf("%s", &msg);
sendto(sockfd, msg, MAXDATASIZE, 0, (struct sockaddr *)&sin_addr, sin_len);
}
}
void *recv_tail_server(void *args)
{
printf("rrrr\n");
int sockfd;
char buft[MAXDATASIZE];
struct sockaddr_in cli_addr;
bzero(&cli_addr, sizeof(cli_addr));
cli_addr.sin_family = AF_INET;
cli_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
cli_addr.sin_port = htons(recv_tail_port);
socklen_t cli_len = sizeof(cli_addr);
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
{
printf("error opening socket\n");
exit(1);
}
if (bind(sockfd, (struct sockaddr *)&cli_addr, sizeof(cli_addr)) == -1)
{
printf("error in bind\n");
exit(1);
}
while (1)
{
if (recvfrom(sockfd, buft, MAXDATASIZE, 0, (struct sockaddr *)&cli_addr, &cli_len) > 0)
printf("RECV: %s\n", buft );
}
}
void init_client()
{
}
int main(int argc, char *argv[])//recv_tail_port, send_tail_port
{
if (argc < 3)
{
fprintf(stderr, "lack port\n");
exit(1);
}
recv_tail_port = atoi(argv[1]);
send_tail_port = atoi(argv[2]);
pthread_create(&rec_tail_thread, NULL, send_head_server, NULL);
pthread_create(&send_tail_thread, NULL, recv_tail_server, NULL);
pthread_join(rec_tail_thread, NULL);
pthread_join(send_tail_thread, NULL);
return 0;
}/*main*/