C语言Linux下socket通信

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;
}


转载于:https://my.oschina.net/imhuayi/blog/484430

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值