⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simplesocket.txt

📁 简单的socket源码
💻 TXT
字号:
//  Server2.c   多客户端Socket简单编程 - 服务器

#include <stdio.h>  
#include <stdlib.h>  
#include <errno.h>  
#include <string.h>  
#include <sys/types.h>  
#include <netinet/in.h>  
#include <sys/socket.h>  
#include <sys/wait.h>  


#define MYPORT 3490 
#define BACKLOG 10  
#define MAXDATASIZE 100
void  *doClientThead(void *pParam)
{

    char buf[MAXDATASIZE];
    int cilentSocket=(int)pParam;
    int numbytes;
    while(1)
{

    if ((numbytes=recv(cilentSocket , buf, MAXDATASIZE, 0)) == -1) {
            perror("接收信息错误");
            break;
        }   
        if(numbytes==0)
        {
            printf("客户端退出\n");
             break;
        }
        buf[numbytes] = '\0';
            printf("收到来自客户端<%d>的信息: %s\n",cilentSocket,buf);
    }
    close(cilentSocket);
    printf("客户端 socket 已正常关闭!\n");
    close(cilentSocket);
}

main()
{
    int sockfd, new_fd;
    struct sockaddr_in my_addr; 
    struct sockaddr_in their_addr;
    int sin_size;
    int numbytes;
    pthread_t pt;
    if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
        perror("socket创建失败");
        exit(1);
    }
    my_addr.sin_family = AF_INET;    
    my_addr.sin_port = htons(MYPORT);  
    my_addr.sin_addr.s_addr = INADDR_ANY;
    bzero(&(my_addr.sin_zero), 8);   
    if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) {
    perror("绑定端口失败");
    exit(1);
    }
    if (listen(sockfd, BACKLOG) == -1) {
        perror("监听端口失败");
        exit(1);
    }
    printf("服务器已经开始监听3490端口!\n");
    while(1) {
        sin_size = sizeof(struct sockaddr_in);
        if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1) {
            perror("接收信息错误");
            continue;
        }
        printf("服务器已取得得来自客户端 %s的连接!\n", inet_ntoa(their_addr.sin_addr));

        if (send(new_fd, "连接成功\n", 12, 0) == -1){
            perror("发送连接信息失败");
            continue;
        }

    //创建客户端进程
        if(pthread_create(&pt,NULL,doClientThead,(void *)new_fd)!=0){
            printf("客户端<%d>创建线程失败!\n",new_fd);
            exit(1);
        }

    }
} 


 


//  Client2.c   多客户端Socket简单编程 - 客户端

#include <stdio.h>  
#include <stdlib.h>  
#include <errno.h>  
#include <string.h>  
#include <sys/types.h>  
#include <netinet/in.h>  
#include <sys/socket.h>  
#include <sys/wait.h>  

#define PORT 3490 
#define MAXDATASIZE 100
int main()
{
    int sockfd, numbytes;
    char buf[MAXDATASIZE];
    struct hostent *he;
    struct sockaddr_in their_addr;
    char  argv[15];
    int n;
    printf("请输入服务器IP地址:\n");
    scanf("%s",argv);

    if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
        perror("socket创建失败");
        exit(1);
    }

    their_addr.sin_family = AF_INET;  
    their_addr.sin_port = htons(PORT); 
    if(inet_aton(argv, &their_addr.sin_addr)==0)
    {
        perror("输入ip格式错误!");
        exit(1);
    }
    bzero(&(their_addr.sin_zero), 8);  
    if (connect(sockfd, (struct sockaddr *)&their_addr, sizeof(struct sockaddr)) == -1) {
        perror("连接服务器失败");
        exit(1);
    }

    if ((numbytes=recv(sockfd, buf, MAXDATASIZE, 0)) == -1) {
        perror("与服务器连接失败");
        exit(1);
    }
    buf[numbytes] = '\0';
    printf("%s,你已经可以向服务器发送信息了!\n",buf);
    printf("请输入信息后按回车或空格建即可发送,退出请按ctrl+c!\n");
    while(1)
    {
        scanf("%s",buf);
        n=strlen(buf);
        if (!fork()) {
            if (send(sockfd, buf, n+1, 0) == -1)
            {
                perror("发送失败");
                exit(1);
            }
            printf("发送成功,信息已发送到服务器!\n");
        }
    }
    close(sockfd);
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -