客户端程序
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#define PORT 3333
#define MAX_SIZE 1024
int main(int argc, char *argv[])
{
if(argc != 2)
{
printf("Please input server ip!\n");
exit(1);
}
int sockfd;
int n_write;
struct sockaddr_in server_addr;
char buffer[MAX_SIZE];
if((sockfd = socket(AF_INET,SOCK_STREAM,0)) < 0)
{
perror("client socket error!\n");
exit(1);
}
bzero(&server_addr,0);
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addr.s_addr = inet_addr(argv[1]);
if(connect(sockfd,(struct sockaddr *)&server_addr,sizeof server_addr) < 0)
{
perror("connect server error!\n");
exit(1);
}
while(1)
{
memset(buffer,0,sizeof(buffer));
printf("Please input send msg:\n");
gets(buffer);
n_write = write(sockfd,buffer,strlen(buffer));
if(n_write == -1)
{
perror("send to server msg error!\n");
exit(1);
}
}
return 0;
}
服务机程序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <netdb.h>
#define PORT 3333
#define MAX_SIZE 1024
void * read_msg(void *arg)
{
int n_read;
int new_fd = *((int *)arg);
char buffer[MAX_SIZE];
printf("new_fd = %d\n",new_fd);
while(1)
{
memset(buffer,0,sizeof(buffer));
n_read = read(new_fd,buffer,sizeof(buffer));
if(n_read < 0)
{
perror("recv client msg error!\n");
exit(1);
}
if(n_read == 0)
{
printf("client is close!!\n");
close(new_fd);
pthread_exit(NULL);
}
buffer[n_read] = '\0';
printf("recv msg:%s\n",buffer);
}
}
int main()
{
int sockfd;
int new_fd;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int n_read;
int ser_size;
int opt = 1;
char buffer[MAX_SIZE];
pthread_t id;
if((sockfd = socket(AF_INET,SOCK_STREAM,0)) < 0)
{
perror("socket error!\n");
exit(1);
}
printf("socket success.............!\n");
if(setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt)) < 0)
{
perror("set socket option error!\n");
exit(1);
}
bzero(&server_addr,0);
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addr.s_addr = inet_addr("192.168.1.10");
if(bind(sockfd,(struct sockaddr *)&server_addr,sizeof server_addr) < 0)
{
perror("bind error!\n");
exit(1);
}
printf("bind success.............!\n");
listen(sockfd,5);
printf("listen success.............!\n");
printf("accepting..................!\n");
while(1)
{
ser_size = sizeof client_addr;
if((new_fd = accept(sockfd,(struct sockaddr *)&client_addr,&ser_size)) < 0)
{
perror("accept error!\n");
exit(1);
}
printf("accept success.................!\n");
pthread_create(&id,NULL,read_msg,&new_fd);
}
return 0;
}