C语言socket通信实例

来源:互联网 发布:网络关注平台出租 编辑:程序博客网 时间:2024/05/22 17:45

/************************ client ****************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#define MAXLIN 4096

int main(int argc,char **argv)
{
    int sockfd,rec_len;
    char sendline[4096];
    char buf[MAXLIN];
    struct sockaddr_in servaddr;

    if(argc!=2)
    {
        printf("usage:./client <ipaddress>\n");
        exit(0);
    }
    if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
    {
        printf("create socket error:%s(error:%d)\n",strerror(errno),errno);
        exit(0);
    }
    memset(&servaddr,0,sizeof(servaddr));
    servaddr.sin_family=AF_INET;
    servaddr.sin_port=htons(8000);
    if(inet_pton(AF_INET,argv[1],&servaddr.sin_addr)<=0)
    {
        printf("inet_pton error for %s\n",argv[1]);
        exit(0);
    }
    if(connect(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr))<0)
    {
        printf("connect error:%s(errno:%d)\n",strerror(errno),errno);
        exit(0);
    }
    printf("send msg to server:\n");
    fgets(sendline,4096,stdin);
    if(!fork())
    {
        if(send(sockfd,sendline,strlen(sendline),0)<0)
        {
            printf("send msg error :%s(errno:%d)\n",strerror(errno),errno);
            exit(0);
        }
    }
    if((rec_len=recv(sockfd,buf,MAXLIN,0))==-1)
    {
        perror("recv error\n");
        exit(1);
    }
    buf[rec_len]='\0';
    printf("Received:%s",buf);
    close(sockfd);
    return 0;
}

/************************ client end ****************************************/

/************************ server start ****************************************/

#include <stdio.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define DEFAULT_PORT 8000
#define MAXLIN 4096

int main(int argc,char **argv)
{
    int socket_fd,connect_fd;
    struct sockaddr_in servaddr;
    char buff[4096];
    int n;
    //初始化
    if((socket_fd=socket(AF_INET,SOCK_STREAM,0))==-1)
    {
        printf("create socket error:%s(errno :%d)\n",strerror(errno),errno);
        exit(0);
    }
    memset(&servaddr,0,sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_addr.s_addr=htonl(INADDR_ANY);//IP地址设置成INADDR_ANY,让系统自动获取本机的IP地址
    servaddr.sin_port=htons(DEFAULT_PORT);
    //设置的端口为DEFAULT_PORT
    //将本地地址绑定到所创建的套接字上
    if(bind(socket_fd,(struct sockaddr*)&servaddr,sizeof(servaddr))==-1)
    {
        printf("bind socket error:%s(errno:%d)\n",strerror(errno),errno);
        exit(0);
    }
    //开始监听是否有客户端连接
    if(listen(socket_fd,10)==-1)
    {
        printf("listen socket error:%s(errno:%d)\n",strerror(errno),errno);
        exit(0);
        
    }
    printf("======waiting for client's request=====\n");
    while(1)
    {
        if((connect_fd=accept(socket_fd,(struct sockaddr*)NULL,NULL))==-1){
            printf("accept socket error :%s(errno:%d)\n",strerror(errno),errno);
            continue;
        }
        n=recv(connect_fd,buff,MAXLIN,0);
        if(!fork()){
            if(send(connect_fd,"hello man\n",26,0)==-1)
            perror("send error");
            close(connect_fd);
            exit(0);
        }
    buff[n]='\n';
    printf("recv client : %s\n",buff);
    close(connect_fd);
    }
    close(socket_fd);
}

/************************ server end ****************************************/



阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 2019开业大吉自己圈宣传语 大吉大利今晚吃鸡 大吉大利生肖 开业大吉图片 宝格丽大吉岭茶 大吉岭茶香水 2018开业大吉朋友圈宣传语 宝格丽大吉岭 祝开业大吉短句 开张大吉by春日负暄 开张大吉by春风负暄 开工大吉图片 开业大吉贺词 大吉大利晚上吃鸡 进宅大吉贺词 大吉大利作品 阳宅大吉图片 开张大吉春日负喧 大吉大利打一生肖 大吉大利吃鸡图片 开工大吉贺词 大同 山西大同 大同方特 大同大学 大同太原 太原大同 大同吧 大同世界 天下大同 大同小异 大同景点 爱我大同吧 爱我大同 大同市 太原到大同 大同灵丘 大同高铁 大同到太原 北京到大同 大同到北京