客户端
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include <stdlib.h>
#include <string.h>
#include<stdio.h>
#include <pthread.h>
int s,addr_len;
struct sockaddr_in addr;
void *recieve_function(void *arg) 线程函数,创建线程后执行的内容
{
char gbuffer[1024]; 接受的大小小于1024
while(1)
{
bzero(gbuffer,sizeof(gbuffer)); 清空buffer
int glen = recvfrom(s,gbuffer,sizeof(gbuffer),0,(struct sockaddr *)&addr,&addr_len); 从socket得到数据
printf("server: %s/n",gbuffer); 打印出来
}
}
main(int ac,char** av)
{
if (ac < 3)
{
fprintf(stdout, "Usage: %s <ip> <port>/n", av[0]);
exit(1);
}
参数解析
int len;
addr_len =sizeof(struct sockaddr_in);
char buffer[1024];
if((s = socket(PF_INET,SOCK_DGRAM,0))<0){
perror("socket");
exit(1);
}
bzero(&addr,sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(atoi(av[2]));
addr.sin_addr.s_addr = inet_addr(av[1]);
根据参数构成一个addr
if(connect(s,(struct sockaddr*)&addr,sizeof(addr))==-1)
{
perror("connect error");
exit(1);
}
连接
pthread_t t1;
if( pthread_create( &t1, NULL, recieve_function, NULL) )
printf("erro creating thread");
建立一个回收的线程
char msg[16] = "client message";
sendto(s,msg,sizeof(msg),0,(struct sockaddr *)&addr,addr_len);
while(1){
memset(buffer,0,sizeof(buffer));
清空buffer
len =read(STDIN_FILENO,buffer,sizeof(buffer));
从标准的输入输出读入buffer
sendto(s,buffer,len,0,(struct sockaddr *)&addr,addr_len);
发送到服务器
}
}