linux下socket编程

作为一个嵌入式开发者,在实际的研发项目中,常常需要编写socket网络编程接口,提供给软件开发人员。下面将提供一个常用的代码模板(客户端的功能可以用单片机多功能调试助手进行验证):

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

#define BUFFSIZE 1024
void HandleClient(int sock)
{
     char cmd_buffer[BUFFSIZE];
     memset(cmd_buffer,'\0',sizeof(cmd_buffer));
     int received;
        /* 接收消息 */
    if(((received=recv(sock, cmd_buffer, BUFFSIZE, 0))<0))
    {
        printf("recieve error!\n");
    }
    else
    {
        if(strncmp(cmd_buffer,"yulin",5)==0)
        {
            printf("Commander 74!\n");
            send(sock,"Commander 74!", sizeof("Commander 74!"),0);
            close(sock);
        }
        else if(strncmp(cmd_buffer,"ranjiejie",9)==0)
        {
            printf("ranranjie\n");
            send(sock,"ranranjie", sizeof("ranranjie"),0);
            close(sock);
        }
        else
        {
            printf("命令错误!\n");
            send(sock,"ranranjie:is error", sizeof("ranranjie:is error"),0);
            close(sock);
        }
    }
    close(sock);
}
int main(int argc,char **argv)
{
    //socket init
     int listenfd,connfd;
     struct sockaddr_in sockaddr;
     listenfd = socket(AF_INET,SOCK_STREAM,0);       //有面向流的(TCP)和面向数据报的 (UDP)Socket。分别取值 SOCK_STREAM 和 SOCK_DGRAM
     if ( listenfd<0)                                // 创建socket,若成功,返回socket描述符
    {
        printf( "socket error!\n");
        return 0;
    }
    int bind_free=1;
    if(setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&bind_free,sizeof(bind_free))==-1){
        printf( "setsockopt error!\n");
        return 0;
    }
     memset(&sockaddr,0,sizeof(sockaddr));
     sockaddr.sin_family = AF_INET;                 // IPv4 协议
     sockaddr.sin_addr.s_addr = htonl(INADDR_ANY);  //INADDR_ANY,来代表本机所有可用的网络地址
     sockaddr.sin_port = htons(10982);               //端口号
    if(bind(listenfd,(struct sockaddr *) &sockaddr,sizeof(sockaddr))<0)//绑定地址和端口
    {
        printf("bind error!\n");
        return 0;
    }
    if(listen(listenfd,1024)<0)                     //设置 Socket 为监听模式
    {
        printf( "listen error!\n");
        return 0;
    }
     printf("Please wait for the client information\n");

     while(1)
     {
         if((connfd = accept(listenfd,(struct sockaddr*)NULL,NULL))==-1)
         {
             printf("accpet socket error: %s errno :%d\n",strerror(errno),errno);
             continue;
         }
         HandleClient(connfd);
    }
    close(listenfd);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值