IPv4的網絡編程代碼示例

server端

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

#define PORT 8888
#define BACKLOG 2

void process_conn_server(int s)
{
        ssize_t size = 0;
        char buffer[1024];
        printf("enter process\n");
        for(;;){
                bzero(buffer, sizeof(buffer));
                size = read(s, buffer, 1024);
                printf("read data:%s\n", buffer);
                if(size == 0) {
                        return;
                }   
                sprintf(buffer, "%ld bytes altogether\n", size-1);
                write(s, buffer, strlen(buffer)+1);
        }   
}

int main(int argc, char *argv[])
{
        int ss, sc; 
        struct sockaddr_in server_addr;
        struct sockaddr_in client_addr;

        int err;
        pid_t pid;
        ss = socket(AF_INET, SOCK_STREAM, 0);
        if(ss < 0) {
                printf("socket error\n");
                return -1;
        }

        bzero(&server_addr, sizeof(server_addr));
        server_addr.sin_family = AF_INET;
        server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
        server_addr.sin_port = htons(PORT);

        err = bind(ss, (struct sockaddr*)&server_addr, sizeof(server_addr));
        if(err < 0) {
                printf("bind error\n");
                return -1;
        }

        err = listen(ss, BACKLOG);
        if(err < 0) {
                printf("listen error\n");
                return -1;
        }

        for(;;) {
                socklen_t addrlen = sizeof(struct sockaddr);

                sc = accept(ss, (struct sockaddr*)&client_addr, &addrlen);
                if(sc < 0) {
                        continue;
                } else {
                        printf("connect:\n");
                }
                pid = fork();
                if(pid == 0) {
                        process_conn_server(sc);
                        close(ss);
                } else {
                        close(sc);
                }
        }
}

client端

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<unistd.h>
#include<arpa/inet.h>
#define PORT 8888
void process_conn_client(int s)
{
        ssize_t size = 0;
        char buffer[1024];
        char *buffer1 = "holle world";
        printf("enter process\n");
        for(;;){
                printf("\n");
                printf("input data>");
                fgets(buffer, sizeof(buffer), stdin);
                size = strlen(buffer);
                printf("write: %s\n", buffer);
                if(size > 0) {
                        write(s, buffer, size);
                        size = read(s, buffer, 1024);
                        printf("read : %s \n", buffer);
                }   
        }   
}

int main(int argc, char *argv[])
{
        int s;
        struct sockaddr_in server_addr;

        s = socket(AF_INET, SOCK_STREAM, 0); 
        if(s < 0) {
                printf("socket error\n");
                return -1;
        }

        bzero(&server_addr, sizeof(server_addr));
        server_addr.sin_family = AF_INET;
        server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
        server_addr.sin_port = htons(PORT);

        connect(s, (struct sockaddr*)&server_addr, sizeof(struct sockaddr));
        process_conn_client(s);
        close(s);
        return 0;
}

打開一個界面執行服務端,並等待客戶端連接

kayshi@ubuntu:~/code/net_socket/server$ ./server 
connect:
enter process
read data:1

read data:12

read data:123

read data:1234

read data:12345

read data:123456

read data:1234567

在客戶端數據數據,會得到服務器返回的數據計數的字符串

kayshi@ubuntu:~/code/net_socket/client$ ./client
enter process

input data>1
write: 1

read : 1 bytes altogether
 

input data>12
write: 12

read : 2 bytes altogether
 

input data>123
write: 123

read : 3 bytes altogether
 

input data>1234
write: 1234

read : 4 bytes altogether
 

input data>12345
write: 12345

read : 5 bytes altogether
 

input data>123456
write: 123456

read : 6 bytes altogether
 

input data>1234567
write: 1234567

read : 7 bytes altogether

發佈了54 篇原創文章 · 獲贊 30 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章