UDP网络编程例程1

来源:互联网 发布:mysql count * 编辑:程序博客网 时间:2024/04/29 04:30

服务器端:server_udp.c

 

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>

#define SERVPORT 3333 //服务器监听端口号
#define BACKLOG  10   //最大同时连接请求数

/*
//用于接收数据的线程
//形参:argv为一个socked句柄
void * threadFunc(void * argv)
{
 int csocket;
 int ret;
 char buf[512];
 
  int len = sizeof(adr_send); //用于保存adr_clnt大小

 csocket = *(int*)argv;

 while(1)
 {
  //recv(csocket, buf, 512, 0);
  ret = recvfrom(csocket, buf, sizeof(buf), 0, (struct sockaddr*)&adr_send, &len );; //接收客户端传来的数据
  if(ret == -1){
   perror("recvfrom failed/n");
   exit(1);
  }
  
  buf[ret] = '/0'; //最后1位设置为结束符
  printf("接收:%s", buf);
 
  if( strncmp(buf, "stop", 4) == 0){ //若接收到stop,退出
   printf("结束.../n");
   break;
  }
 }

 return NULL;
}
*/

int main()
{
 pthread_t pid; //定义一个线程id
 int sockfd; //定义一个socked句柄
 char buf[256];  //接收数据缓存区
 struct sockaddr_in adr_inet; //本地socket信息
 struct sockaddr_in adr_clnt; //客户端socket信息
 int ret; //用于保存返回值
  int len = sizeof(adr_clnt); //用于保存adr_clnt大小

 printf("等待客户端.../n");
 
 //初始化本地socket信息
 adr_inet.sin_family = AF_INET; //IPv4协议
 adr_inet.sin_port = htons(SERVPORT); //端口号,使用htons函数转换
 adr_inet.sin_addr.s_addr = INADDR_ANY; //IP地址为0.0.0.0
 bzero(&(adr_inet.sin_zero), 8); //用bzero函数将sin_zero置零
 
 sockfd = socket(AF_INET, SOCK_DGRAM, 0); //建立数据报socket(即UDP)
 if(sockfd == -1){
  perror("socked failed/n");
  exit(1);
 }

 ret = bind(sockfd, (struct sockaddr*)&adr_inet, sizeof(adr_inet)); //绑定socket
 if(ret == -1){
  perror("bind failed/n");
  exit(1);
 } 

// pthread_create(&pid, NULL, threadFunc, (void *)&socket);

 while(1){
  ret = recvfrom(sockfd, buf, sizeof(buf), 0, (struct sockaddr*)&adr_clnt, &len ); //接收客户端传来的数据
  if(ret == -1){
   perror("recvfrom failed/n");
   exit(1);
  }
 
  buf[ret] = '/0'; //最后1位设置为结束符
  printf("接收:%s", buf);
 
  if( strncmp(buf, "stop", 4) == 0){ //若接收到stop,退出
   printf("结束.../n");
   break;
  }

 }

 close(sockfd); //关闭socked

 return 0;
}

 

客户端:client_udp.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <string.h>

#define SERVPORT 3333

int main()
{
 int sockfd;
 char buf[80];
 struct sockaddr_in adr_serv; //服务器端socket信息
 int ret;

 printf("连接服务器端.../n");
 
 //初始化服务器socket信息
 adr_serv.sin_family = AF_INET;
 adr_serv.sin_port = htons(SERVPORT);
 adr_serv.sin_addr.s_addr = INADDR_ANY;
 bzero(&(adr_serv.sin_zero), 8);
 
 sockfd = socket(AF_INET, SOCK_DGRAM, 0);
 if(sockfd == -1){
  perror("socket failed/n");
  exit(1);
 }
 
 printf("发送数据.../n");
 
 while(1){
  //scanf("%s", buf);
  fgets(buf, 80, stdin);
  ret = sendto(sockfd, buf, sizeof(buf), 0, (struct sockaddr*)&adr_serv, sizeof(adr_serv) ); //发送数据到服务器端
  if(ret < 0){
   perror("sendto failed/n");
   exit(1);
  }

  if(strncmp(buf, "stop", 4) == 0){
   printf("结束发送.../n");
   break;
  }
 }
 
 close(sockfd);
 
 return 0;

 

 

 

原创粉丝点击