文档章节

C语言Linux下socket通信

古世界
 古世界
发布于 2015/07/27 20:34
字数 458
阅读 43
收藏 0

server端

#include <stdio.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>

#define MAXPENDING 5    /* Max connection requests */
#define BUFFSIZE 32
#define SERVER_PORT 6000

void Die(char *mess) { perror(mess); exit(1); }

void HandleClient(int sock) {
    char buffer[BUFFSIZE];
    int received = -1;
    /* Send bytes and check for more incoming data in loop */
    while ((received = recv(sock, buffer, BUFFSIZE, 0)) > 0) {
        /* Send back received data */
        if (send(sock, buffer, received, 0) != received) {
            Die("Failed to send bytes to client");
        }
    }
    close(sock);
}

int main(int argc, char *argv[]) {
    int serversock, clientsock;
    struct sockaddr_in echoserver, echoclient;
    /* Create the TCP socket */
    if ((serversock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
        Die("Failed to create socket");
    }
    /* Construct the server sockaddr_in structure */
    memset(&echoserver, 0, sizeof(echoserver));       /* Clear struct */
    echoserver.sin_family = AF_INET;                  /* Internet/IP */
    echoserver.sin_addr.s_addr = htonl(INADDR_ANY);   /* Incoming addr */
    echoserver.sin_port = htons(SERVER_PORT);         /* server port */

    /* Bind the server socket */
    if (bind(serversock, (struct sockaddr *) &echoserver,
                sizeof(echoserver)) < 0) {
        Die("Failed to bind the server socket");
    }
    /* Listen on the server socket */
    if (listen(serversock, MAXPENDING) < 0) {
        Die("Failed to listen on server socket");
    }

    /* Run until cancelled */
    while (1) {
        unsigned int clientlen = sizeof(echoclient);
        /* Wait for client connection */
        if ((clientsock = accept(serversock, (struct sockaddr *) &echoclient,
                        &clientlen)) < 0) {
            Die("Failed to accept client connection");
        }
        fprintf(stdout, "Client connected: %s\n", inet_ntoa(echoclient.sin_addr));
        HandleClient(clientsock);
    }
}

client端

 #include <netinet/in.h>    // for sockaddr_in
 #include <sys/types.h>     // for socket
 #include <sys/socket.h>    // for socket
 #include <stdio.h>         // for printf
 #include <stdlib.h>        // for exit
 #include <string.h>        // for bzero
 
 /*
  *  #include <sys/types.h>
  *  #include <sys/stat.h>
  *  #include <fcntl.h>
  *  #include <unistd.h>
  */
 
 #define SERVER_PORT 6000
 #define BUFFER_SIZE 1024
 #define FILE_NAME_MAX_SIZE 512
 #define SERVER_IP "192.168.3.219"
 
 int client_socket = 0;
 
 int main(int argc, char **argv)
 {
     //设置一个socket地址结构server_addr,代表服务器的internet地址, 端口
     client_socket = socket(AF_INET, SOCK_STREAM, 0);
     struct sockaddr_in server_addr;
     bzero(&server_addr, sizeof(server_addr));
     server_addr.sin_family = AF_INET;
     if (inet_aton(SERVER_IP, &server_addr.sin_addr) == 0) //服务器的IP地址来自程序的参数
     {
         printf("Server IP Address Error! \n");
         exit(1);
    }

    server_addr.sin_port = htons(SERVER_PORT);
    socklen_t server_addr_length = sizeof(server_addr);

    // 向服务器发起连接,连接成功后client_socket代表了客户机和服务器的一个socket连接
    if (connect(client_socket, (struct sockaddr*) &server_addr,
        server_addr_length) < 0)
    {
        printf("Can Not Connect To %s!\n", SERVER_IP);
        exit(1);
    }

    char* hello = "hello i am seven !\n";
    uint16_t data[3] = {0,65535,0};
    size_t len  = sizeof(data) / sizeof(uint16_t); //获取数组长度
    printf("data size: %i\n", len);
    printf("hello size: %i\n", strlen(hello));
    
    send(client_socket, hello, strlen(hello)+1, 0);
	//send(client_socket, data, len*2, 0);
    
    close(client_socket);
    return 0;
}


© 著作权归作者所有

古世界
粉丝 14
博文 28
码字总数 7386
作品 0
济南
后端工程师
私信 提问
[北京]我想要应聘一个C语言相关的职位

≡专业技能≡ 1.熟悉 C语言,Pro*C数据库程序编程。 2.熟悉Oracle数据库的使用及Oracle数据库结构原理。 3.熟悉Linux系统结构,能熟练运用基本命令,并掌握了Vi,Vim,Gcc等工具。 4.熟悉Lin...

louislz
2013/03/26
863
2
linux c/c++

最近想跳槽,目前在外包 本科,三年+工作经验 linux开发,最好c语言 熟悉多线程多进程开发,socket,通信等网络编程 如果能有机会接触搜索算法等开发更好 学习能力强,性格好,无不良嗜好...

陈舵主
2012/09/18
1K
11
求深圳嵌入式c相关的实习工作

1、开发语言: 熟悉Linux环境下的C语言编程,了解常用数据结构及通用算法(,具有良好的编码习惯。 2、开发环境: 熟练使用Linux操作系统,熟练使用gcc、vim 等工具进行代码编写和调试,熟悉...

黄润星
2012/11/17
519
1
跨年呈献:HP-Socket for Linux 1.0 震撼发布

三年,三年,又三年,终于,终于,终于不用再等啦!就在今天,HP-Socket for Linux v1.0 震撼发布!还是一样的接口,一样的高效,一样的简便,一样的味道。 HP-Socket for Linux提供了与Win...

伤神小怪兽
2017/12/15
2.9K
46
Linux进程和线程间IPC机制

Linux进程间IPC 1.管道(Pipe)及有名管道(named pipe): 1、管道是半双工的,要实线读写需建立两根管道; 2、匿名管道用于父子进程或者兄弟进程之间(如forkexec创建的进程),命名管道允许没...

dodonei
2018/04/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

spring源码分析6: ApplicationContext的初始化与BeanDefinition的搜集入库

先前几篇都是概念的讲解:回顾下 BeanDefinition 是物料 Bean是成品 BeanFactory是仓库,存储物料与成品 ApplicationContext初始化搜集物料入库,触发生产线,取出物料生产Bean 本文研究spr...

星星之焱
24分钟前
5
0
彻底解决tomcat乱码问题

本地项目请求访问,浏览器中文输出没问题。 部署到服务器上面之后,返回到浏览器的中文就乱码了。 尝试办法: 1.修改tomcat下的conf中的service.xml中的配置信息: 重新启动后,没有效果还是...

诗书易经
40分钟前
5
0
Java开发需要掌握的IDEA插件大全

1、Lombok 解释:这是最基本的插件,2017年就火了,还没用的百度一下吧。 博客链接:Intellij IDEA 安装lombok及使用详解 2、PlantUML integration 解释:各种类之间的关联图,高级开发必备。...

木九天
40分钟前
6
0
python学习10.05:Python range()快速初始化数字列表

实际场景中,经常需要存储一组数字。例如在游戏中,需要跟踪每个角色的位置,还可能需要跟踪玩家的几个最高得分。在数据可视化中,处理的几乎都是由数字(如温度、距离、人口数量、经度和纬度...

太空堡垒185
47分钟前
4
0
java单元测试,PowerMockito模拟方法内new对象

在做单元测试中有时候需要对方法内new出来的对象进行隔离,这是我们需要使用PowerMockito。 添加依赖 <dependency> <groupId>org.powermock</groupId> <artifactId>......

如梦之猿
49分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部