server.c

#include <stdlib.h>

#include <stdio.h>

#include <errno.h>

#include <string.h>

#include <unistd.h>

#include <netdb.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <sys/types.h>

#include <arpa/inet.h>



int main(int argc, char *argv[])

{

        int sockfd,new_fd;

        struct sockaddr_in server_addr;

        struct sockaddr_in client_addr;

        int sin_size,portnumber;

        char hello[1000]="Hello! Are You Fine?\n";



        if(argc!=2)

        {

                fprintf(stderr,"Usage:%s portnumber\a\n",argv[0]);

                exit(1);

        }



        if((portnumber=atoi(argv[1]))<0)

        {

                fprintf(stderr,"Usage:%s portnumber\a\n",argv[0]);

                exit(1);

        }



        /* server端開始建立socket描写叙述符 */

        if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)

        {

                fprintf(stderr,"Socket error:%s\n\a",strerror(errno));

                exit(1);

        }



        /* server端填充 sockaddr结构  */

        bzero(&server_addr,sizeof(struct sockaddr_in));

        server_addr.sin_family=AF_INET;

        server_addr.sin_addr.s_addr=htonl(INADDR_ANY);

        server_addr.sin_port=htons(portnumber);



        /* 捆绑sockfd描写叙述符  */

        if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)

        {

                fprintf(stderr,"Bind error:%s\n\a",strerror(errno));

                exit(1);

        }



        /* 监听sockfd描写叙述符  */

        if(listen(sockfd,5)==-1)

        {

                fprintf(stderr,"Listen error:%s\n\a",strerror(errno));

                exit(1);

        }



        while(1)

        {

                /* server堵塞,直到客户程序建立连接  */

                sin_size=sizeof(struct sockaddr_in);

                if((new_fd=accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size))==-1)

                {

                        fprintf(stderr,"Accept error:%s\n\a",strerror(errno));

                        exit(1);

                }



                fprintf(stderr,"Server get connection from %s\n",

                inet_ntoa(client_addr.sin_addr));



                fscanf(stdin,"%s",hello);

                if(write(new_fd,hello,strlen(hello))==-1)

                {

                        fprintf(stderr,"Write Error:%s\n",strerror(errno));

                        exit(1);

                }

                /* 这个通讯已经结束     */

                close(new_fd);

                /* 循环下一个     */

        }

        close(sockfd);

        exit(0);

}

client.c

#include <stdlib.h>

#include <stdio.h>

#include <errno.h>

#include <string.h>

#include <unistd.h>

#include <netdb.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <sys/types.h>

#include <arpa/inet.h>



int main(int argc, char *argv[])

{

        int sockfd;

        char buffer[1024];

        struct sockaddr_in server_addr;

        struct hostent *host;

        int portnumber,nbytes;



        if(argc!=3)

        {

                fprintf(stderr,"Usage:%s hostname portnumber\a\n",argv[0]);

                exit(1);

        }



        if((host=gethostbyname(argv[1]))==NULL)

        {

                fprintf(stderr,"Gethostname error\n");

                exit(1);

        }



        if((portnumber=atoi(argv[2]))<0)

        {

                fprintf(stderr,"Usage:%s hostname portnumber\a\n",argv[0]);

                exit(1);

        }



        /* 客户程序開始建立 sockfd描写叙述符  */

        if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)

        {

                fprintf(stderr,"Socket Error:%s\a\n",strerror(errno));

                exit(1);

        }



        /* 客户程序填充服务端的资料       */

        bzero(&server_addr,sizeof(server_addr));

        server_addr.sin_family=AF_INET;

        server_addr.sin_port=htons(portnumber);

        server_addr.sin_addr=*((struct in_addr *)host->h_addr);



        /* 客户程序发起连接请求         */

        if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)

        {

                fprintf(stderr,"Connect Error:%s\a\n",strerror(errno));

                exit(1);

        }



        /* 连接成功了           */

        if((nbytes=read(sockfd,buffer,1024))==-1)

        {

                fprintf(stderr,"Read Error:%s\n",strerror(errno));

                exit(1);

        }

        buffer[nbytes]='\0';

        printf("I have received:%s\n",buffer);

        /* 结束通讯     */

        close(sockfd);

        exit(0);

}

Makefile

all:server client

server:server.c

            gcc $^ -o $@

client:client.c

            gcc $^ -o $@

linux c server and client 简单的通信的更多相关文章

  1. 解决Linux 下server和client 通过TCP通讯:accept成功接收却报错的问题

    今天在写简单的TCP通讯例子的时候,遇到了一个问题:server 和client能够连接成功,并且client也能够正常发送,但server就是接收不到,在网上搜索一番后,终于解决了问题.在这里整理如 ...

  2. Python中Socket编程server与client简单的合法性认证

    导入python自带的hmac模块对随机生成的位数32字节和自定义token进行加密处理 import osmsg = os.urandom(32)  #随机生成msgOut[4]: b"F ...

  3. swoole学习(二)----搭建server和client

    1.搭建server 1.1搭建server.php 1.搭建websocket服务器,首先建立 server.php 文件, <?php $server = new swoole_websoc ...

  4. Android简单实现Socket通信,client连接server后,server向client发送文字数据

    案例实现的是简单的Socket通信,当client(Androidclient)连接到指定server以后,server向client发送一句话文字信息(你能够拓展其他的了) 先看一下服务端程序的实现 ...

  5. Linux下的C Socket编程 -- server端的简单示例

    Linux下的C Socket编程(三) server端的简单示例 经过前面的client端的学习,我们已经知道了如何创建socket,所以接下来就是去绑定他到具体的一个端口上面去. 绑定socket ...

  6. 应用java多线程实现server端与多client之间的通信

    应用多线程来实现server与多线程之间的通信的基本步骤 1.server端创建ServerSocket,循环调用accept()等待client链接 2.client创建一个Socket并请求和se ...

  7. netty4.0 Server和Client的通信

    netty4.0 Server和Client的通信 创建一个maven项目 添加Netty依赖 <dependency> <groupId>io.netty</group ...

  8. (填坑系列) 用aio写server与client进行通信的坑

    最近闲来无事,就估摸着自己写个“服务注册中心”来玩,当然因为是个人写的,所以一般都是简洁版本. 代码地址在:https://gitee.com/zhxs_code/my-service-registe ...

  9. C Socket Programming for Linux with a Server and Client Example Code

    Typically two processes communicate with each other on a single system through one of the following ...

随机推荐

  1. String hashCode 方法为什么选择数字31作为乘子

    1. 背景 某天,我在写代码的时候,无意中点开了 String hashCode 方法.然后大致看了一下 hashCode 的实现,发现并不是很复杂.但是我从源码中发现了一个奇怪的数字,也就是本文的主 ...

  2. 在IIS上SSL的部署和启动SSL安全【转】

    在这次的项目中遇见了这个问题,之前我并懂了不了多少,只对了SSL和HTTPS理论了解.但并不知道在实际中如何运行.经过自己在网上查阅一番,最后靠自己解决了这个问题,现在在这里和大家分享一下.如果写的有 ...

  3. 一些NLP相关的JD,作参考

    NLP 应用研发工程师 - AI Lab工作城市: 上海岗位描述:1.用户搜索意图识别,分词和词性标注,实体词标注 2.利用机器学习.NLP 技术优化文本分类.语义理解及信息抽取岗位要求:1.有自然语 ...

  4. Concurrent HTTP connections in Node.js

    原文: https://fullstack-developer.academy/concurrent-http-connections-in-node-js/ -------------------- ...

  5. ERROR in index.web.js from UglifyJs

    使用weexpack构建weex应用时,npm run serve一直报这个错误 ERROR in index.web.js from UglifyJs Unexpected token: name ...

  6. AOP中Advice执行两遍的原因

    在我的spring项目中,Aop的Advice执行了两边,就好像拦截了两遍一样. 原因是:切面应该切到接口的实现类上,而不是接口上

  7. curl_setopt — 设置 cURL 传输选项

    curl_setopt (PHP 4 >= 4.0.2, PHP 5, PHP 7) curl_setopt — 设置 cURL 传输选项 bool curl_setopt ( resource ...

  8. Creating objects on stack or heap

    class Player {  private: int health;  int strength;  int agility; public: void move(); void attackEn ...

  9. logback-kafka-appender

    logback 日志写入kafka队列 logback-kafka-appender Logback incompatibility Warning Due to a bug in logback-c ...

  10. android中使用toolbar

    系统默认使用的是ActionBar,就是界面中的标题栏,但是由于ActionBar设计的原因,被限定只能位于活动的顶部,从而不能实现Material Design效果,所以官方建议使用Toolbar替 ...