计算器服务器端/客户端示例
来源:互联网 发布:音乐声音放大软件 编辑:程序博客网 时间:2024/06/03 12:40
实现:
1)客户端连接服务器端后以1字节整数形式传递待算数字个数。
2)客户端向服务器端传递的每个整数型数据占用4字节
3)传递整数型数据后接着传递运算符。运算符信息占用1字节
4)选择字符+ - * 之一传递
5)服务器端以4字节整数型向客户端传回运算的结果
6)客户端得到的运算结果后终止与服务器端的连接、
数据格式:
服务器:
#include<stdlib.h>#include<stdio.h>#include<WinSock2.h>#pragma comment(lib,"ws2_32.lib") #define bufsize 1024int caculate1(char marknum, int* number, int count2);void main() {WSADATA wsadata;SOCKET hclientsocket, hserversocket;SOCKADDR_IN hclientaddr, hserveraddr;int zsClientAddr;char message[bufsize]="\0";int count, recvlen, recvcnt,result=0;//winsock库初始化WSAStartup(MAKEWORD(2, 2), &wsadata);hserversocket = socket(PF_INET, SOCK_STREAM, 0);//创建服务器端套接字(IPV4 面向连接传输) if (hserversocket == INVALID_SOCKET) printf( "socket 创建失败\n");memset(&hserveraddr, 0, sizeof(hserveraddr)); //清空hserveraddr.sin_family = AF_INET; //IPv4hserveraddr.sin_addr.s_addr = htonl(INADDR_ANY); //获取本机地址hserveraddr.sin_port = htons(atoi("9999"));//绑定地址if (bind(hserversocket, (SOCKADDR*)&hserveraddr, sizeof(hserveraddr)) == SOCKET_ERROR) printf("bind 失败\n");//监听服务器,客户端最大等待数目为5if (listen(hserversocket, 5) == SOCKET_ERROR) printf("listen 失败\n"); printf("服务器启动成功!\n");//接受客户端zsClientAddr = sizeof(hclientaddr);hclientsocket = accept(hserversocket, (SOCKADDR*)&hclientaddr, &zsClientAddr);if (hclientsocket == INVALID_SOCKET) printf("accept 错误!\n");else printf("已有客户端连接!\n");while (1) {//接受数字数目count = 0;recv(hclientsocket, (char*)&count, 1, 0);recvlen = 0;while ((count*4+1)>recvlen) {recvcnt = recv(hclientsocket, &message[recvlen], bufsize - 1, 0);recvlen += recvcnt;}result = caculate1(message[recvlen - 1], (int*)message, count);printf("%d\n", result);if (send(hclientsocket,(char*)&result, 4, 0) == SOCKET_ERROR) printf("send result 错误\n");}getchar();closesocket(hclientsocket);closesocket(hserversocket);WSACleanup();}int caculate1(char marknum, int* number, int count2) { //转成int数组进行计算int result = number[0];switch (marknum){case'+':for (int i = 1; i < count2; i++) {result += number[i];}break;case '-':for (int i = 1; i < count2; i++) {result -= number[i];}break;case '*':for (int i = 1; i < count2; i++) {result *= number[i];}break;default:printf("输入的值错误!\n");break;}return result;}
客户端#include<stdlib.h>#include<stdio.h>#include<WinSock2.h>#pragma comment(lib,"ws2_32.lib") #define bufsize 1024void main() {WSADATA wsadata;SOCKET hsocket;SOCKADDR_IN hsocketaddr;char message[bufsize] = "\0";int count,result,number;char *cache=NULL;WSAStartup(MAKEWORD(2, 2), &wsadata);//创建sockethsocket = socket(PF_INET, SOCK_STREAM, 0);if (hsocket == INVALID_SOCKET) printf("socket 创建失败!\n" );memset(&hsocketaddr, 0, sizeof(hsocketaddr));//清空hsocketaddr.sin_family = AF_INET;//ipv4hsocketaddr.sin_addr.s_addr = inet_addr("127.0.0.1"); //访问本机地址hsocketaddr.sin_port = htons(atoi("9999"));//连接if (connect(hsocket, (SOCKADDR*)&hsocketaddr, sizeof(hsocketaddr)) == SOCKET_ERROR)printf("connet 失败!\n");while (1) {printf("输入数字的数目:");scanf("%d", &count);message[0] = (char)count; //1字节整数类型,所以计算的数不能超过1字节整数for (int i = 0; i < count; i++) {printf("请输入数字的值:");scanf("%d",(int*)&message[i*4+1]);}fgetc(stdin); //删除缓冲区中的\nprintf("请输入操作符:");scanf("%c",&message[count * 4 + 1]); //不删除\n 此步骤无法执行if(send(hsocket, message, count * 4 + 2, 0)==SOCKET_ERROR)printf("send message 错误!!\n");if (recv(hsocket, (char*)&result, 4, 0)==SOCKET_ERROR) //4字节的resultprintf("recv result 错误!!\n");printf("结果是 %d\n",result );}getchar();closesocket(hsocket);WSACleanup();}
0 0
- 计算器服务器端/客户端示例
- 5.2 计算器服务器端/客户端示例
- VSS2005服务器端/客户端配置示例
- 简单的计算器服务器端/客户端程序
- openVPN服务器端和客户端配置文件示例
- TCP/IP网络编程_计算器服务器端客户端
- Java socket编程服务器端/客户端代码编写示例
- java网络编程之socket网络编程示例(服务器端/客户端)
- java网络编程之socket网络编程示例(服务器端/客户端)
- 命名管道客户端及服务器端简单代码示例
- socket客户端发送消息到服务器端简单示例
- C#线程池多线程Socket通讯 服务器端和客户端示例
- visual studio 中UDP 服务器端和tcp客户端示例
- 适合新手的一个经典socket客户端和服务器端文件传输示例
- 初识客户端和服务器端
- 客户端和服务器端通信
- 服务器端控制客户端显示
- 客户端触发服务器端事件
- OriginPro2017教程_ OriginLab OriginPro 2017破解版详细图文安装激活教程 破解补丁
- Win10+VS2015+cuda8.0+theano+keras的配置过程
- JavaWeb工程中web.xml基本配置
- task_struct
- 【JAVA】基于HttpClient4.0的网络爬虫基本框架(Java实现)
- 计算器服务器端/客户端示例
- TCP/IP第三层--网络层
- 飞花的糖果
- Latex数学公式表
- 用VS写代码时,出现\vc\include\cmath的情况
- Red5 启动闪退
- Python语言特点
- spfa、Dijkstra、Floyd算法最短路算法详解
- 多线程(线程的状态转换图及常见执行情况)