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. jetty+mongodb 配置session外部数据库存储

    monbgodb简介 主页 http://www.mongodb.org/ oschina.net 介绍页 http://www.oschina.net/p/mongodb MongoDB是一个介于关 ...

  2. 人脸识别中的Procruster analysis应用

    本文中,我们通过Procrustes analysis来处理特征点,Procrustes analysis算法可以参考:http://en.wikipedia.org/wiki/Procrustes_ ...

  3. go语言之进阶篇WriteString的使用

    1.WriteString的使用 示例: package main import ( "fmt" "os" ) func WriteFile(path stri ...

  4. iOS蓝牙空中升级(固件升级)

    空中升级又叫固件升级,指你手机从服务器下载下来的包或者数据,通过蓝牙传输给你的外设升级固件.如果你能把蓝牙的基础搞懂,其实也并不是很难,我在这里只不过提供一下思路. 空中升级略难的地方在于数据处理和交 ...

  5. 在PC上像普通winform程序调试WINCE程序

    在PC上像普通winform程序调试WINCE程序 步骤: 1. 在VS2008中到 工具→选项→设备工具→设备,选择对应的平台,另存为新的名称,如CEDesktopRun,关闭VS2008.(如果不 ...

  6. Java对象的序列化和反序列化源码阅读

    前言 序列化和反序列化看起来用的不多,但用起来就很关键,因为稍一不注意就会出现问题.序列化的应用场景在哪里?当然是数据存储和传输.比如缓存,需要将对象复刻到硬盘存储,即使断电也可以重新反序列化恢复.下 ...

  7. Ubuntu环境变量解析

    在Ubuntu中有如下几个文件可以设置环境变量 /etc/profile:在登录时,操作系统定制用户环境时使用的第一个文件,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. /e ...

  8. 什么是BFC(Block Formatting Context)

    原文:https://segmentfault.com/a/1190000012221820 https://www.w3.org/TR/CSS2/visuren.html#block-formatt ...

  9. vSCode打开文件老覆盖原窗口

    https://segmentfault.com/q/1010000006131199?_ea=1023522 设置中搜preview,改为false

  10. Google想出了一个决定人员晋升的算法,然后就没有然后了......

    Google 有点跑偏了,逗死我了~实践一下也好~ Prasad Setty 是 Google People Analytics 团队的副总裁.7 年前 Google 成立的这支团队的职责是收集和利用 ...