用的广播IP,所以校内网不用设置,直接在校内网随便找台电脑打开服务端,然后再随便找台电脑打开客户端,然后就可以做100以内的加法了。。。

说明:客户端输入“ready”,服务端会随机发送一条加法算式,客户端发送结果,如果回答正确就显示“Right!”,然后可以输入“ready”做下一道题,否则显示“Wrong!”,需重新输入结果,直到做对为止。。。

还想加点UI,看来要学习多线程了。。。

就是这么蛋疼。。。

客户端

#include<stdio.h>
#include<winsock.h>
#pragma comment (lib,"ws2_32.lib") int main()
{
char buffer[];
WSADATA data;
WSAStartup(MAKEWORD(,), &data);
SOCKET mySocket;
struct sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port = htons();
server.sin_addr.s_addr = inet_addr("10.7.4.255");
mySocket = socket(AF_INET, SOCK_DGRAM, );
int len = sizeof(server);
while(scanf("%s", buffer) != EOF)
{
sendto(mySocket, buffer, sizeof(buffer), ,(sockaddr*)&server, len);
recvfrom(mySocket, buffer, sizeof(buffer), , (sockaddr *)&server, &len);
printf("%s\n", buffer);
}
closesocket(mySocket);
WSACleanup();
return ;
}

服务端

#include <stdio.h>
#include <winsock.h>
#include <string.h>
#include <time.h>
#pragma comment (lib,"ws2_32.lib") int main()
{
WSADATA data;
WSAStartup(MAKEWORD(, ), &data);
SOCKET mySocket;
sockaddr_in from;
sockaddr_in local;
local.sin_family = AF_INET;
local.sin_addr.s_addr = INADDR_ANY;
local.sin_port = htons();
mySocket = socket(AF_INET, SOCK_DGRAM, );
bind(mySocket, (sockaddr *)&local, sizeof(local));
char right[] = "Right!";
char wrong[] = "Wrong!";
char inputError[] = "Input Error!";
char answer[];
char buffer[];
srand(time(NULL));
int len = sizeof(from);
while()
{
recvfrom(mySocket, buffer, sizeof(buffer), , (sockaddr *)&from, &len);
if(strcmp(buffer, "ready") == )
{
int x = rand() % ;
int y = rand() % ;
int z = x + y;
sprintf(answer, "%d", z);
sprintf(buffer, "%d + %d = ?", x, y);
sendto(mySocket, buffer, sizeof(buffer), , (sockaddr *)&from, len);
int ok = ;
while(!ok)
{
recvfrom(mySocket, buffer, sizeof(buffer), , (sockaddr *)&from, &len);
if(strcmp(buffer, answer) == )
{
ok = ;
sendto(mySocket, right, sizeof(right), , (sockaddr *)&from, len);
}
else
sendto(mySocket, wrong, sizeof(wrong), , (sockaddr *)&from, len);
}
}
else sendto(mySocket, inputError, sizeof(inputError), , (sockaddr *)&from, len);
}
closesocket(mySocket);
WSACleanup();
return ;
}

无聊拿socket写的100以内的加法考试。。。的更多相关文章

  1. 用shell写个100以内的所有数字之和

    #!/bin/bash i=2 while ((i<=100));do j=2 while ((j<=i/2));do if ((i%j==0));then break fi let j+ ...

  2. python、C++经典算法题:打印100以内的素数

    题目 打印100以内的素数 思路1 素数的特点: 素数一定是奇数 一个数如果是合数,那么它一定能够被2到这个合数的开平方内的某个素数整除(这个特点是提升效率的关键) 一个数如果不能被从2到它自身开平方 ...

  3. 实现100以内的素数输出(Python与C++对比)

    今天从链接http://www.2cto.com/kf/201302/187699.html中看到了Python实现100以内的素数输出的算法,颇受感触.尤其是被其中的Python的列表生成器的使用方 ...

  4. 1.2输出100以内的素数&输出前100个素数。

    输出100以内的素数只是一个嵌套,在1.1的基础上添加一层循环,只需要注意从2开始,并且变量需要换一个. #include<stdio.h> int main() { ; ; i < ...

  5. PHP面试题之实现输出100以内的质数

    最近求职时的其中一道面试题: 求100之内的质数 <? //求100以内质数 for ($i = 1; $i <= 100; $i++) { $k = 0; for ($j = 1; $j ...

  6. while做法1.兔子生兔子 2.求100以内质数的和3.洗发水15元 牙膏5元 香皂2元 150元的算法

    1.兔子生兔子 2.求100以内质数的和 3.150块钱花完问题

  7. 9月13日JavaScript语句循环(100以备奇偶数、100以内与7先关的数、100以内整数的和、10以内阶乘、乘法口诀、篮球弹起高度、64格子放东西)

    3.循环 循环是操作某一个功能(执行某段代码). ①循环四要素: a 循环初始值 b 循环的条件 c 循环状态 d 循环体 ②for循环 a 穷举:把所有的可能性的都一一列出来. b 迭代:每次循环都 ...

  8. while:1.兔子生兔子问题 2.打印菱形 3.求100以内质数的和4.洗发水15元一瓶,牙膏5元一支,香皂2元一块,150元刚好花完

    1.兔子生兔子问题: 2.打印菱形 3.求100以内质数的和 4.洗发水15元一瓶,牙膏5元一支,香皂2元一块,150元刚好花完有多少种情况?

  9. for嵌套:1.兔子生兔子问题 2.打印菱形 3.求100以内质数的和

    1.兔子生兔子问题 方法一: 方法二: 2.打印菱形 3.求100以内质数的和

随机推荐

  1. yii2

    yii2框架官方说明文档 http://www.yiiframework.com/doc/guide/2.0/zh_cn/caching.page yii2创建您的第一个application应用 h ...

  2. 使用泛型简单封装NGUI的ScrollView实现滑动列表

    懒,是老毛病了,周末跑了半马,跑完也是一通累,好久没锻炼了..也是懒的,有时都懒的写博客..最近看到项目中各种滑动列表框,本着要懒出水平来的原则,决定花点时间简单处理下(暂时未做列表太多时的优化):1 ...

  3. Cas Server中各配置文件介绍

    Cas Server中所有的配置文件都是放在WEB-INF目录及其子目录下的. 在WEB-INF/classes下的配置文件有: l  cas-theme-default.properties:该文件 ...

  4. 【C#】与C及OC的不同点

    事实上熟悉这些语言的朋友们深知,这几个语言全然没有可比性. 因为工作须要,近期须要重温C#语言,难免会受到C和OC的基础知识影响. 此篇是本人的一个学习笔记.仅此献给有C/OC基础,须要继续学习C# ...

  5. c# 请问如何将四个RadioButton分成两组?

    WinForm 只要放在同一个容器中的RadioButton 就自动互斥 创建两个panel容器,分别放两个RadioButton 就是两组了

  6. mybatis11 sqlMapConfig.xml文件说明

    1sqlMapConfig.xml SqlMapConfig.xml中配置的内容和顺序如下: properties(属性) settings(全局配置参数) typeAliases(类型别名) typ ...

  7. view中的setTag和getTag方法的理解

    下面是一段自定义适配器中的getView方法,其中使用了view的一个setTag和getTag方法 View中的setTag(Onbect)表示给View添加一个格外的数据(相当于缓存),以后可以用 ...

  8. DOS和UNIX文本文件之间相互转换的方法

    在Unix/Linux下可以使用file命令查看文件类型,如下: file dosfile.txt 使用dos2unix 一般Linux发行版中都带有这个小工具,只能把DOS转换为UNIX文件,命令如 ...

  9. web前端:html

    一.理解表单的作用 1.web 应用程序不仅仅是给用户显示数据,还应该给用户提供一个可以输入数据的图形用户界面.表单的主要作用在于在网页上提供一个图形用户界面,已采集和提交用户输入的数据. 2.htm ...

  10. css-a:visited

    如下代码: <a href="#">链接地址</a> 如果属性 href的设置为'#',则鼠标滑过(即使没有点击',也算成'visited'.而对于 hre ...