现在的位置: 首页 > 综合 > 正文

linux c编程之UDP

2013年10月09日 ⁄ 综合 ⁄ 共 2696字 ⁄ 字号 评论关闭

本文参考自   21天学通linux c编程

socket编程可参考:

socket编程:

http://www.cnblogs.com/skynet/archive/2010/12/12/1903949.html

http://www.kuqin.com/networkprog/20080512/8361.html

网络字节顺序以及转换函数

http://blog.sina.com.cn/s/blog_4ad7c25401019qqb.html

1,设置套接字

2,读取套接字状态

3,UDP客户端实现

4,UDP服务器实现



1,设置套接字

2,读取套接字状态

#include<sys/types.h>
#include<sys/socket.h>
#include<stdio.h>
int  main()
{
  int s;
  int val=1,len,i ;
  len= sizeof(int);
  if((s = socket(AF_INET,SOCK_STREAM,0))<0)    //creat
  {
    perror("connect");
    exit(1);
  }
  else
  {
  	  printf("a socket was created.\n");
  	  printf("socket number:%d\n",s);
   }
   i=setsockopt(s,SOL_SOCKET,SO_TYPE,&val,len);   //set
   if("i==0")
   {
   	  printf("set socket ok.\n.");
    }
    else
   {
   	  printf("set socket error.\n.");
    }
    getsockopt(100,SOL_SOCKET,SO_TYPE,&val,&len);  //get
   perror("socket");
}

3,UDP客户端实现

有些编译器报错则在使用addr时(struct sockaddr *)&addr

#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/socket.h>

#define REMOTEPORT 4567
#define REMOTEIP "127.0.0.1"

int   main(int argc,char *argv[])
{
    int s,len;
    struct sockaddr_in addr;
    int addr_len;
    char msg[256];
    int i=0;  
   
    if (( s= socket(AF_INET, SOCK_DGRAM, 0) )<0)   //建立一个socket
    {
        perror("error");
        exit(1);
    }
    else
    {
    	printf("socket created .\n");
    	printf("socked id: %d \n",s);
    	printf("remote ip: %s \n",REMOTEIP);
    	printf("remote port: %d \n",REMOTEPORT);
    }
      
    len=sizeof(struct sockaddr_in);        //长度
    bzero(&addr,sizeof(addr));
    addr.sin_family=AF_INET;              //添加端口与地址信息
    addr.sin_port=htons(REMOTEPORT);
    addr.sin_addr.s_addr=inet_addr(REMOTEIP);
            
    while (1)
    {
    	bzero(msg,sizeof(msg));
        len = read(STDIN_FILENO,msg,sizeof(msg));
        sendto(s,msg,len,0,&addr,addr_len);                 //发送信息
        printf("\nInput message: %s \n",msg);
        len= recvfrom (s,msg,sizeof(msg),0,&addr,&addr_len);/*这是接收到的信息。*/
        printf("%d :",i);
        i++;
        printf("Received message: %s \n",msg);              /*这是服务器返回的信息。*/
    }   
} 

4,UDP服务器实现

有些编译器报错则在使用addr时(struct sockaddr *)&addr

#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#define LOCALPORT 4567

int   main(int argc,char *argv[])
{
    int mysock,len;
    struct sockaddr_in addr;
    int i=0;
    char msg[256];
    int addr_len;
      
    
    if (( mysock= socket(AF_INET, SOCK_DGRAM, 0) )<0)
    {
        perror("error");
        exit(1);
    }
    else
    {
    	printf("socket created .\n");
    	printf("socked id: %d \n",mysock);
	}
   
    addr_len=sizeof(struct sockaddr_in);
    bzero(&addr,sizeof(addr));
    addr.sin_family=AF_INET;
    addr.sin_port=htons(LOCALPORT);
    addr.sin_addr.s_addr=htonl(INADDR_ANY);
   
   
    if(bind(mysock,&addr,sizeof(addr))<0)
    {
        perror("connect");
        exit(1);
    }
    else
    {
    	printf("bind ok.\n");
    	printf("local port :%d \n",LOCALPORT);
    }
  
    while (1)
    {
    	bzero(msg,sizeof(msg));
        len= recvfrom (mysock,msg,sizeof(msg),0,&addr,&addr_len);/*接收到信息*/
        printf("%d :",i);
        i++;
        printf("message from : %s \n",inet_ntoa(addr.sin_addr));
        printf("  message length : %d \n",len);
        printf("  message : %s \n\n",msg);
        sendto(mysock,msg,len,0,&addr,addr_len); /*以上将字符串返回给客户端*/
    }  
}

抱歉!评论已关闭.