c语言 用法中if的用法,简单概述一下,清晰明了就好了。

您的举报已经提交成功,我们将尽快处理,谢谢!
逻辑上正确,语法上错误是(后面的IF应该是if)
createtable仓库表(仓库号intnotnull,数量intnotnull)select*from仓库表insert仓库表values(12,0)ins...
第1次循环:a=0,b=1,c=0,d=0
第2次循环:a=1,b=0,c=0,d=0
第3次循环:a=1,b=1,c=0,d=0
第4次循环:...
有几处错误:
1、第8行到第10行的函数声明不正确,应该为:
void reading(double *,int);
void product(doubl...
你那个电脑已经没有什么存在的意义了,再升级的话说实话是浪费,因此强烈建议你换一台机器。
大家还关注下次自动登录
现在的位置:
& 综合 & 正文
Linux下使用socket传输文件的C语言简单实现
服务器和客户端程序应当分别运行在两台计算机上。
在运行服务器端的计算机终端执行:./file_server
在运行客户端的计算终端上执行:./file_client
ipaddr_server
然后根据提示输入要传输的服务器上的文件,该文件必须在服务器的当前运行目录中,否则会提示找不到文件。
直接上源码吧:
#include&netinet/in.h&
#include&sys/types.h&
#include&sys/socket.h&
#include&stdio.h&
#include&stdlib.h&
#include&string.h&
#define HELLO_WORLD_SERVER_PORT
#define LENGTH_OF_LISTEN_QUEUE
#define BUFFER_SIZE
#define FILE_NAME_MAX_SIZE
int main(int argc, char **argv)
struct sockaddr_in
bzero(&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htons(INADDR_ANY);
server_addr.sin_port = htons(HELLO_WORLD_SERVER_PORT);
int server_socket = socket(PF_INET, SOCK_STREAM, 0);
if (server_socket & 0)
printf("Create Socket Failed!\n");
if (bind(server_socket, (struct sockaddr*)&server_addr, sizeof(server_addr)))
printf("Server Bind Port: %d Failed!\n", HELLO_WORLD_SERVER_PORT);
if (listen(server_socket, LENGTH_OF_LISTEN_QUEUE))
printf("Server Listen Failed!\n");
struct sockaddr_in client_
length = sizeof(client_addr);
int new_server_socket = accept(server_socket, (struct sockaddr*)&client_addr, &length);
if (new_server_socket & 0)
printf("Server Accept Failed!\n");
char buffer[BUFFER_SIZE];
bzero(buffer, sizeof(buffer));
length = recv(new_server_socket, buffer, BUFFER_SIZE, 0);
if (length & 0)
printf("Server Recieve Data Failed!\n");
char file_name[FILE_NAME_MAX_SIZE + 1];
bzero(file_name, sizeof(file_name));
strncpy(file_name, buffer,
strlen(buffer) & FILE_NAME_MAX_SIZE ? FILE_NAME_MAX_SIZE : strlen(buffer));
FILE *fp = fopen(file_name, "r");
if (fp == NULL)
printf("File:\t%s Not Found!\n", file_name);
bzero(buffer, BUFFER_SIZE);
int file_block_length = 0;
while( (file_block_length = fread(buffer, sizeof(char), BUFFER_SIZE, fp)) & 0)
printf("file_block_length = %d\n", file_block_length);
if (send(new_server_socket, buffer, file_block_length, 0) & 0)
printf("Send File:\t%s Failed!\n", file_name);
bzero(buffer, sizeof(buffer));
fclose(fp);
printf("File:\t%s Transfer Finished!\n", file_name);
close(new_server_socket);
close(server_socket);
////////////////////////////////////////////////////////////////////////
// file_server.c -- socket文件传输服务器端示例代码
// /////////////////////////////////////////////////////////////////////
#include&netinet/in.h&
#include&sys/types.h&
#include&sys/socket.h&
#include&stdio.h&
#include&stdlib.h&
#include&string.h&
#define HELLO_WORLD_SERVER_PORT
#define LENGTH_OF_LISTEN_QUEUE
#define BUFFER_SIZE
#define FILE_NAME_MAX_SIZE
int main(int argc, char **argv)
// set socket's address information
// 设置一个socket地址结构server_addr,代表服务器internet的地址和端口
struct sockaddr_in
bzero(&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htons(INADDR_ANY);
server_addr.sin_port = htons(HELLO_WORLD_SERVER_PORT);
// create a stream socket
// 创建用于internet的流协议(TCP)socket,用server_socket代表服务器向客户端提供服务的接口
int server_socket = socket(PF_INET, SOCK_STREAM, 0);
if (server_socket & 0)
printf("Create Socket Failed!\n");
// 把socket和socket地址结构绑定
if (bind(server_socket, (struct sockaddr*)&server_addr, sizeof(server_addr)))
printf("Server Bind Port: %d Failed!\n", HELLO_WORLD_SERVER_PORT);
// server_socket用于监听
if (listen(server_socket, LENGTH_OF_LISTEN_QUEUE))
printf("Server Listen Failed!\n");
// 服务器端一直运行用以持续为客户端提供服务
// 定义客户端的socket地址结构client_addr,当收到来自客户端的请求后,调用accept
// 接受此请求,同时将client端的地址和端口等信息写入client_addr中
struct sockaddr_in client_
length = sizeof(client_addr);
// 接受一个从client端到达server端的连接请求,将客户端的信息保存在client_addr中
// 如果没有连接请求,则一直等待直到有连接请求为止,这是accept函数的特性,可以
// 用select()来实现超时检测
// accpet返回一个新的socket,这个socket用来与此次连接到server的client进行通信
// 这里的new_server_socket代表了这个通信通道
int new_server_socket = accept(server_socket, (struct sockaddr*)&client_addr, &length);
if (new_server_socket & 0)
printf("Server Accept Failed!\n");
char buffer[BUFFER_SIZE];
bzero(buffer, sizeof(buffer));
length = recv(new_server_socket, buffer, BUFFER_SIZE, 0);
if (length & 0)
printf("Server Recieve Data Failed!\n");
char file_name[FILE_NAME_MAX_SIZE + 1];
bzero(file_name, sizeof(file_name));
strncpy(file_name, buffer,
strlen(buffer) & FILE_NAME_MAX_SIZE ? FILE_NAME_MAX_SIZE : strlen(buffer));
FILE *fp = fopen(file_name, "r");
if (fp == NULL)
printf("File:\t%s Not Found!\n", file_name);
bzero(buffer, BUFFER_SIZE);
int file_block_length = 0;
while( (file_block_length = fread(buffer, sizeof(char), BUFFER_SIZE, fp)) & 0)
printf("file_block_length = %d\n", file_block_length);
// 发送buffer中的字符串到new_server_socket,实际上就是发送给客户端
if (send(new_server_socket, buffer, file_block_length, 0) & 0)
printf("Send File:\t%s Failed!\n", file_name);
bzero(buffer, sizeof(buffer));
fclose(fp);
printf("File:\t%s Transfer Finished!\n", file_name);
close(new_server_socket);
close(server_socket);
#include&netinet/in.h&
// for sockaddr_in
#include&sys/types.h&
// for socket
#include&sys/socket.h&
// for socket
#include&stdio.h&
// for printf
#include&stdlib.h&
// for exit
#include&string.h&
// for bzero
#define HELLO_WORLD_SERVER_PORT
#define BUFFER_SIZE
#define FILE_NAME_MAX_SIZE
int main(int argc, char **argv)
if (argc != 2)
printf("Usage: ./%s ServerIPAddress\n", argv[0]);
struct sockaddr_in client_
bzero(&client_addr, sizeof(client_addr));
client_addr.sin_family = AF_INET;
client_addr.sin_addr.s_addr = htons(INADDR_ANY);
client_addr.sin_port = htons(0);
int client_socket = socket(AF_INET, SOCK_STREAM, 0);
if (client_socket & 0)
printf("Create Socket Failed!\n");
if (bind(client_socket, (struct sockaddr*)&client_addr, sizeof(client_addr)))
printf("Client Bind Port Failed!\n");
struct sockaddr_in
bzero(&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
if (inet_aton(argv[1], &server_addr.sin_addr) == 0)
printf("Server IP Address Error!\n");
server_addr.sin_port = htons(HELLO_WORLD_SERVER_PORT);
socklen_t server_addr_length = sizeof(server_addr);
if (connect(client_socket, (struct sockaddr*)&server_addr, server_addr_length) & 0)
printf("Can Not Connect To %s!\n", argv[1]);
char file_name[FILE_NAME_MAX_SIZE + 1];
bzero(file_name, sizeof(file_name));
printf("Please Input File Name On Server.\t");
scanf("%s", file_name);
char buffer[BUFFER_SIZE];
bzero(buffer, sizeof(buffer));
strncpy(buffer, file_name, strlen(file_name) & BUFFER_SIZE ? BUFFER_SIZE : strlen(file_name));
send(client_socket, buffer, BUFFER_SIZE, 0);
FILE *fp = fopen(file_name, "w");
if (fp == NULL)
printf("File:\t%s Can Not Open To Write!\n", file_name);
bzero(buffer, sizeof(buffer));
int length = 0;
while(length = recv(client_socket, buffer, BUFFER_SIZE, 0))
if (length & 0)
printf("Recieve Data From Server %s Failed!\n", argv[1]);
int write_length = fwrite(buffer, sizeof(char), length, fp);
if (write_length & length)
printf("File:\t%s Write Failed!\n", file_name);
bzero(buffer, BUFFER_SIZE);
printf("Recieve File:\t %s From Server[%s] Finished!\n", file_name, argv[1]);
fclose(fp);
close(client_socket);
客户端不一定要bind(),服务端一定要bind(),为什么?不然客户端怎么知道服务器位置(IP+PORT)。 一般客户端不绑定端口,因为客户程序经常开关, 由于一些原因(这里我说不清楚,你碰到了自然理解), 断开时端口很少立刻释放(一般要1、2分钟)。 所以客户端绑定端口容易出问题。
注:服务器绑定的是侦听端口,客户连接后,
新分配一个sock和它连接(这个sock的port是不同的,相当于没有bind的一个端口)
由于侦听端口是没有实际联接的,所以断开时不需握手,也就没有释放问题了。
(注这段是回答时突然想到的,自我感觉是正确的,大家来批判啊)
&&&&推荐文章:
【上篇】【下篇】WampServer,
plate-forme de développement Web sous Windows
WampServer est une plate-forme de développement Web sous Windows pour des applications Web dynamiques à l&aide du serveur Apache2, du langage de scripts PHP et d&une base de données MySQL. Il possède également PHPMyAdmin pour gérer plus facilement vos bases de données.
Démarrer avec WampServer
Comme vous allez le voir, WampServer s&installe facilement et son utilisation très intuitive permet de le configurer très rapidement (sans toucher aux fichiers de configuration).
Installation
Double-cliquez sur le fichier téléchargé et laissez vous guider. Tout est géré par l&installeur de WampServer. Par défaut, WampServer est livré avec les toutes dernières versions de Apache, MySQL et PHP.
Une fois installé, vous
manuellement
versions supplémentaires
PHP ou MySQL (Uniquement compilées VC9, VC10 ou
explications
le faire vous seront données sur le .
Chaque version de Apache, MySQL et PHP dispose de sa propre configuration et de ses propres fichiers (données pour MySQL).
Utilisez WampServer :
Création automatique d’un répertoire &&www&& lors de l&installation (typiquement c:\wamp\www).
Créez un sous répertoire pour votre projet et déposez-y vos fichiers PHP
Cliquez sur le lien &&Localhost&& du menu de WampServer ou ouvrez votre navigateur préféré, et allez à l&adresse http://localhost
Fonctionnalités
WampServer dispose également d&un &&TrayIcon&& vous permettant de gérer et configurer simplement vos serveurs, sans toucher aux fichiers de configuration.
Clic gauche sur l&ic?ne de WampServer, vous pouvez notamment :
Gérer les services de Apache et MySQL
passer en mode online/offline (accessible à tous ou limité à localhost)
Installer et changer de version de Apache, MySQL et PHP
Gérer les paramètres de configuration de vos serveurs
Accéder à vos logs
Accéder aux fichiers de configuration
Créer des alias..et bien plus encore
Clic droit :
Changer la langue du menu de WampServer et accéder directement à cette page
Téléchargements
WampServer est disponible gratuitement (sous licence GPL) en deux versions : 32 et 64 bits. Wampserver 2.5 n&est pas compatible avec Windows XP, même SP3, ni avec Windows Server 2003. Les anciennes versions de Wampserver sont chez .
Wampserver
– Wampserver 3.0.6 64 bit x64 – Apache 2.4.23 – PHP 5.6.25/7.0.10 – MySQL 5.7.14 – PhpMyAdmin 4.6.4 – Adminer 4.2.5 – PhpSysInfo 3.2.5
Télécharger WampServer 64 bits (x64) 3.0.6
WampServer est disponible gratuitement (sous licence GPL). Vous pouvez remplir ce formulaire qui nous permettra de vous faire parvenir les actualités formation d’Alter Way, société éditrice, ainsi que toutes les informations liées aux évolutions de WampServer. Si vous ne le souhaitez pas, vous pouvez
ATTENTION : N'utilisez pas d'extensions / addons Wampserver précédents. Ils ne sont plus compatibles avec la nouvelle version de wampserver (VC11)
ATTENTION : Vous devez avoir installé Visual Studio 2012 : VC 11 vcredist_x64/86.exe
Visual Studio 2012 VC 11 vcredist_x64/86.exe
ATTENTION : N'installez pas WampServer 2 par dessus WAMP5.
Si vous avez une version de WAMP5 installée, sauvegardez vos données, désinstallez-la, et supprimez le répertoire de WAMP5 avant d'installer WampServer 2.
ATTENTION : Tous les éléments de la stack 2.2 de WampServer ont été compilés avec le compilateur VC9 de Microsoft.
Les versions antérieures étaient compilées avec la version VC6 du compilateur.
Il n'est donc pas possible de mélanger des composants de la version 2.2 de WampServer avec des éléments des versions antérieures. Ces éléments sont PHP, XDebug, les extensions, et le module php-apache.
Ce mélange provoque des instabilités du système.
Wampserver 3.0.6 32 bit x86 – Apache 2.4.23 – PHP 5.6.25/7.0.10 – MySQL 5.7.14 – PhpMyAdmin 4.6.4 – Adminer 4.2.5 – PhpSysInfo 3.2.5
Télécharger WampServer 32 bits (x86) 3.0.6
WampServer est disponible gratuitement (sous licence GPL). Vous pouvez remplir ce formulaire qui nous permettra de vous faire parvenir les actualités formation d’Alter Way, société éditrice, ainsi que toutes les informations liées aux évolutions de WampServer. Si vous ne le souhaitez pas, vous pouvez
ATTENTION : N'utilisez pas d'extensions / addons Wampserver précédents. Ils ne sont plus compatibles avec la nouvelle version de wampserver (VC11)
ATTENTION : Vous devez avoir installé Visual Studio 2012 : VC 11 vcredist_x64/86.exe
Visual Studio 2012 VC 11 vcredist_x64/86.exe
ATTENTION : N'installez pas WampServer 2 par dessus WAMP5.
Si vous avez une version de WAMP5 installée, sauvegardez vos données, désinstallez-la, et supprimez le répertoire de WAMP5 avant d'installer WampServer 2.
ATTENTION : Tous les éléments de la stack 2.2 de WampServer ont été compilés avec le compilateur VC9 de Microsoft.
Les versions antérieures étaient compilées avec la version VC6 du compilateur.
Il n'est donc pas possible de mélanger des composants de la version 2.2 de WampServer avec des éléments des versions antérieures. Ces éléments sont PHP, XDebug, les extensions, et le module php-apache.
Ce mélange provoque des instabilités du système.
Formations PHP
Les développements, la maintenance et la mise à jour de l&application WampServer sont réalisés par la société Alter Way. Que vous soyez débutant ou expert, l&entité Formation d&Alter Way vous propose un large éventail de formations, aussi bien PHP que MySQL.
powered by反了一个撞墙的问题--el &c:if& 用法_C++,C语言_ThinkSAAS
反了一个撞墙的问题--el &c:if& 用法
反了一个撞墙的问题--el &c:if& 用法
昨天在开发中遇到一个问题 用el 表达式判读
&c: if test=""&的用法.
服务跑起来报页面错误.
&select name="errType"id="errType"style="width: 155"&
&option value=""&请选择&/option&
&option value="1"&c:if test=${rn.errType==1}& selected &/c:if&&一般性错误&/option&
&option value="2"&c:if test=${rn.errType==2}& selected &/c:if&&计算错误&/option&
&option value="3"&c:if test=${rn.errType==3}& selected &/c:if&&专业不严谨&/option&
&option value="4"&c:if test=${rn.errType==4}& selected &/c:if&&专业错误&/option&
&option value="5"&c:if test=${rn.errType==5}& selected &/c:if&&课件制作错误&/option&
看红色部分,答案马上揭晓.
原来,test中 没有加""所以页面报错了.
PHP开发框架
开发工具/编程工具
服务器环境
ThinkSAAS商业授权:
ThinkSAAS为用户提供有偿个性定制开发服务
ThinkSAAS将为商业授权用户提供二次开发指导和技术支持
让ThinkSAAS更好,把建议拿来。
开发客服微信}

我要回帖

更多关于 c语言return的用法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信