多进程socket编程示例

socket编程的基础函数使用请自查询,本文只给出在linux gcc可编译运行的socket通信的服务器程序与客户端程序。
代码如下:server端

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>                //signal
#include <sys/socket.h>            //socket
#include <netinet/in.h>         //sockaddr_in
#include <arpa/inet.h>
#include <string.h>                //memset
const int BUFF_SIZE=10;
void process(int client_fd,int cmd)
{
    switch(cmd)
    {
    case 0:
        printf("rec cmd 0");break;
    case 1:
    default:
        printf("default %d\n",cmd);break;
    }
    send(client_fd,"OK",BUFF_SIZE,0);
}
int main(void) {
    int server_fd,client_fd;    //socket fd
    struct sockaddr_in my_addr;   //服务器网络地址结构体
    struct sockaddr_in remote_addr; //客户端网络地址结构体
    int cmd;
    char str[10];
    pid_t pid;
    unsigned int len;
//1.init
    memset(&my_addr,0,sizeof(my_addr));//数据初始化--清零
    my_addr.sin_family=AF_INET;         //设置为IP通信
    my_addr.sin_addr.s_addr=INADDR_ANY;//服务器IP地址--允许连接到所有本地地址上
    my_addr.sin_port=htons(8000);         //服务器端口号
//2.socket
    if( (server_fd = socket(AF_INET,SOCK_STREAM,0)) < 0)//create socket;
    {
        perror("socket create failed");
        exit(-1);
    }
//3.bind
    if (bind(server_fd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))<0)
    {
        perror("bind failed");
        return 1;
    }
//4.listen
    listen(server_fd,5);
    puts("Now server begin listening ,the listen queue len is5");


    signal(SIGCLD,SIG_IGN);     //ignore teh detail of the child process exit

    int client_len = sizeof(remote_addr);
    while(1){
//5.accept
        if((client_fd=accept(server_fd,(struct sockaddr *)&remote_addr,&client_len))<0)
            {
                perror("accept");
                return 1;
            }
        if( (pid = fork())== 0)            //child
        {
    //        client_fd= accept(server_fd,(struct sockaddr*)&remote_addr,&client_len);
    //        puts("a client connected");
//6.receive
            printf("working for %s\n",inet_ntoa(remote_addr.sin_addr));
            len = send(client_fd,"welcome!",BUFF_SIZE,0);
            puts("send welcome!");
            len = recv(client_fd,&cmd,sizeof(cmd),0);
            process(client_fd,cmd);
            close(client_fd);
            exit(0);
        }
        if(pid)                    //parent
        {
            puts("In parent process");
            close(client_fd);
        //    puts("parent process over");
            sleep(1);
        }
    }
    close(server_fd);
    return EXIT_SUCCESS;
}



#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>                //signal
#include <sys/socket.h>            //socket
#include <netinet/in.h>         //sockaddr_in
#include <arpa/inet.h>
#include <string.h>                //memset
const int BUFF_SIZE=10;
int main(void) {
        int client_sockfd;
        int len,cmd;
        struct sockaddr_in remote_addr; //服务器端网络地址结构体
        char buf[BUFF_SIZE];  //数据传送的缓冲区
        memset(&remote_addr,0,sizeof(remote_addr)); //数据初始化--清零
        remote_addr.sin_family=AF_INET; //设置为IP通信
        remote_addr.sin_addr.s_addr=inet_addr("127.0.0.1");//服务器IP地址
        remote_addr.sin_port=htons(8000); //服务器端口号

       
        if((client_sockfd=socket(PF_INET,SOCK_STREAM,0))<0)
        {
            perror("socket");
            return 1;
        }

       
        if(connect(client_sockfd,(struct sockaddr *)&remote_addr,sizeof(struct sockaddr))<0)
        {
            perror("connect");
            return 1;
        }
        printf("connected to server\n");
        len=recv(client_sockfd,buf,BUFSIZ,0);//接收服务器端信息
             buf[len]='/0';
        printf("received %s\n",buf); //打印服务器端信息

       
        puts("please input cmd");
        scanf("%d",&cmd);
            len=send(client_sockfd,&cmd,4,0);
            len=recv(client_sockfd,buf,BUFF_SIZE,0);
            buf[len]='/0';
                printf("received %s\n",buf); //打印服务器端信息

        close(client_sockfd);//关闭套接字
        return 0;
}


### 回答1: 这是一个 Python 中使用 socket 进行网络通信的简单示例: 服务端代码: ``` import socket # 创建 socket 对象 serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定端口 serversocket.bind(("localhost", 12345)) # 监听连接 serversocket.listen(5) while True: # 接受客户端连接 (clientsocket, address) = serversocket.accept() # 发送消息给客户端 clientsocket.send(b"Hello, World!") # 关闭连接 clientsocket.close() ``` 客户端代码: ``` import socket # 创建 socket 对象 clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 连接服务端 clientsocket.connect(("localhost", 12345)) # 接收消息 print(clientsocket.recv(1024)) # 关闭连接 clientsocket.close() ``` 这个示例中,服务端监听本地的 12345 端口,客户端连接到服务端,服务端发送 "Hello, World!" 给客户端,客户端接收并打印消息。 ### 回答2: socket编程示例是指基于网络的通信编程示例,它使用操作系统提供的Socket API实现网络通信。下面是一个简单的socket编程示例: 1. 服务器端示例: ``` import socket # 创建TCP socket server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定IP地址和端口号 server_socket.bind(('127.0.0.1', 8000)) # 监听端口 server_socket.listen(5) # 接受客户端连接 client_socket, client_address = server_socket.accept() print('客户端连接地址:%s' % str(client_address)) # 接收客户端发送的数据 data = client_socket.recv(1024).decode('utf-8') print('接收到的数据:%s' % data) # 发送响应给客户端 response = 'Hello, Client!' client_socket.send(response.encode('utf-8')) # 关闭socket连接 client_socket.close() server_socket.close() ``` 2. 客户端示例: ``` import socket # 创建TCP socket client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 连接服务器 client_socket.connect(('127.0.0.1', 8000)) # 发送数据给服务器 message = 'Hello, Server!' client_socket.send(message.encode('utf-8')) # 接收服务器响应 response = client_socket.recv(1024).decode('utf-8') print('服务器响应:%s' % response) # 关闭socket连接 client_socket.close() ``` 这个示例演示了一个简单的客户端和服务器之间的基于TCP的通信。服务器端首先创建并绑定一个Socket对象,并监听指定的端口。当有客户端连接请求时,服务器接受连接并与客户端建立通信。客户端通过创建并连接一个Socket对象与服务器进行通信。客户端发送一条消息给服务器,服务器接收到消息后发送响应给客户端。最后,客户端打印出服务器的响应,并关闭连接。 这只是一个简单的示例,真实的socket编程可能涉及更多的错误处理、多线程多进程处理等。但是以上示例可以帮助初学者理解socket编程的基本原理和流程。 ### 回答3: Socket编程是一种用于实现网络通信的编程技术,它允许不同的计算机在网络上进行数据交换。下面是一个简单的Socket编程示例。 客户端: 1. 导入socket模块 2. 创建一个socket对象,可以指定socket类型和协议(例如AF_INET和SOCK_STREAM) 3. 使用socket对象的connect()方法连接到服务器的IP地址和端口号 4. 使用socket对象的send()方法将数据发送到服务器 5. 使用socket对象的recv()方法接收服务器发送过来的数据 6. 关闭连接 服务器端: 1. 导入socket模块 2. 创建一个socket对象,可以指定socket类型和协议(例如AF_INET和SOCK_STREAM) 3. 使用socket对象的bind()方法将服务器的IP地址和端口号绑定到socket对象上 4. 使用socket对象的listen()方法开始监听连接请求 5. 使用socket对象的accept()方法接受连接请求,并返回一个新的socket对象和客户端的地址 6. 使用新的socket对象的recv()方法接收客户端发送的数据 7. 使用新的socket对象的send()方法将数据发送给客户端 8. 关闭连接 以上是一个简单的Socket编程示例,它演示了客户端和服务器之间的基本通信过程。通过Socket编程,我们可以实现网络应用程序,例如聊天室、文件传输等。Socket编程是网络通信的基础,也是网络编程中重要的一部分。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值