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. Guava之FluentIterable使用示例

    FluentIterable 是guava集合类中常用的一个类,主要用于过滤.转换集合中的数据:FluentIterable是一个抽象类,实现了Iterable接口,大多数方法都返回FluentIte ...

  2. cesium原理篇(三)--地形(1)【转】

    转自:http://www.cnblogs.com/fuckgiser/p/5824743.html 简述 前面我们从宏观上分析了Cesium的整体调度以及网格方面的内容,通过前两篇,读者应该可以比较 ...

  3. 汉字转拼音 pinyin4j 字符串 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  4. python3 map,filter和列表推导式

    num_list = [11,2,-33,10,7,3,5,43] 1.filter  函数 获取num_list大于5的元素,并返回列表 用lambda表达式实现: # 在python2 中 fil ...

  5. Java复习2-对象与类

    回顾基础知识过程中遇到的感觉需要记录一下的知识点. 封装 我们设计的class应当尽可能的高内聚,体现为封装的程度.一个class的属性应该只能自己修改,其他class都只是与本class沟通,而不应 ...

  6. Android -- WebView进度条

    有系统actionbar requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);//先给Activity注册界面进度条功能 setCo ...

  7. Java-JUC(三):原子性变量与CAS算法

    原子性 并发程序正确地执行,必须要保证原子性.可见性以及有序性.只要有一个没有被保证,就有可能会导致程序运行不正确. 原子性:一个操作或多个操作要么全部执行完成且执行过程不被中断,要么就不执行. 可见 ...

  8. linux ps 命令的查看

    linux ps 命令的结果中VSZ,RSS,STAT的含义和大小 ps是linux系统的进程管理工具,相当于windows中的资源管理器的一部分功能. 一般来说,ps aux命令执行结果的几个列的信 ...

  9. Javascript 面向对象实践

    踩到了坑,才能学到东西. 记录我在慢慢的转向模块化遇到的问题以及解决的思路. 1.采用立即执行函数,闭包的方式创建模块 html: <!DOCTYPE html> <html lan ...

  10. ASP入门(十一)-Session小案例

    一般来说,在实际开发中,对于 Session 对象使用最多的就是用户登录部分了,这个案例将简单模拟一个用户登录表单.用户是否登录的判断以及用户退出的一系列功能,它一共分了以下几个页面. Login.a ...