ExistentStarts 发表于 2024-1-19 13:10

一个基于socket套接字的编程,实现通信

1、编写服务器和客户端程序,实现客户端与服务器端的通信。2、要求服务器端可接收由客户端发送的数据。(算术表达式,如:(12+8)*6-23=)并对数据进行计算,并将计算的结果返回到客户端,再由客户端打印到终端。)暂时只写了个基础版的,只能实现通信功能(可实现大小写转换),还不能实现计算反馈,后续更新。udpclient部分#include <stdio.h>#include <string.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <strings.h>
#include <ctype.h>
#define MAXLINE 80
#define SERV_PORT 6666
int main(int argc, char *argv[])
{
        struct sockaddr_in servaddr;
        int sockfd, n;
        char buf;
        sockfd = socket(AF_INET, SOCK_DGRAM, 0);
        bzero(&servaddr, sizeof(servaddr));
        servaddr.sin_family = AF_INET;
        inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr);
        servaddr.sin_port = htons(SERV_PORT);
        //发送数据到客户端
        while (fgets(buf, MAXLINE, stdin) != NULL) {
                n = sendto(sockfd, buf, strlen(buf), 0, (struct sockaddr *)&servaddr,
                        sizeof(servaddr));
                if (n == -1)
                        perror("sendto error");
                //接收客户端返回的数据
                n = recvfrom(sockfd, buf, MAXLINE, 0, NULL, 0);
                if (n == -1)
                        perror("recvfrom error");
                //将接收到的数据打印到终端
                send(STDOUT_FILENO, buf, n, 0);
        }
        close(sockfd);
        return 0;
}

udpserver部分
#include <string.h>
#include <netinet/in.h>
#include <stdio.h>
#include <unistd.h>
#include <strings.h>
#include <arpa/inet.h>
#include <ctype.h>
#define MAXLINE 80                                                        //最大数据长度
#define SERV_PORT 6666                                                //服务器端口号
int main(void)
{
        struct sockaddr_in servaddr, cliaddr;        //定义服务器与客户端地址结构体
        socklen_t cliaddr_len;                                        //客户端地址长度
        int sockfd;                                                                //服务器socket文件描述符
        char buf;
        char str;
        int i, n;
        sockfd = socket(AF_INET, SOCK_DGRAM, 0);//创建服务器端套接字文件
        //初始化服务器端口地址
        bzero(&servaddr, sizeof(servaddr));        //地址结构体清零
        servaddr.sin_family = AF_INET;                        //指定协议族
        servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
        servaddr.sin_port = htons(SERV_PORT);        //指定端口号
        //绑定服务器端口地址
        bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
        printf("Accepting connections ...\n");
        //数据传输
        while (1) {
                cliaddr_len = sizeof(cliaddr);
                //接收数据
                n = recvfrom(sockfd, buf, MAXLINE, 0, (struct sockaddr*)&cliaddr,
                        &cliaddr_len);
                if (n == -1)
                        perror("recvfrom error");
                printf("received from %s at PORT %d\n",
                        inet_ntop(AF_INET, &cliaddr.sin_addr, str, sizeof(str)),
                        ntohs(cliaddr.sin_port));
                //服务器端操作,小写转大写
                for (i = 0; i < n; i++)
                        buf = toupper(buf);
                n = sendto(sockfd, buf, n, 0, (struct sockaddr *)&cliaddr,
                        sizeof(cliaddr));
                if (n == -1)
                        perror("sendto error");
        }
        close(sockfd);
        return 0;
}

a147888123 发表于 2024-1-19 15:09

HPSocket4C.dll用这个,可以整出花来,大佬牛逼

da12006 发表于 2024-1-19 16:05

哦驾驭技术
页: [1]
查看完整版本: 一个基于socket套接字的编程,实现通信