当前位置:  编程技术>综合
本页文章导读:
    ▪Linux下的udp广播与接收程序 包含序列号       [代码] udp_send.c #include<stdio.h> #include<stdlib.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<arpa/inet.h> #include<string.h> #include<fcntl.h> #include<un.........
    ▪windows命令行中巧妙使用for命令       参考:http://www.it.com.cn/f/edu/047/5/7703.htm 在命令提示符后键入“For /?”来获得具体帮助,中文的,很棒! For命令的具体格式如下:    For %variable IN (set) do command [command-parameters]   .........
    ▪创建网站服务(Web Services)      创建网站服务(Web Services)     除了调用网站服务之外,我们还可以在 F# 中创建网站服务,这也非常简单。事实上,当创建一个网站服务时,主要问题可能是通过网站服务器暴.........

[1]Linux下的udp广播与接收程序 包含序列号
    来源: 互联网  发布时间: 2013-11-19
[代码] udp_send.c
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<string.h>
#include<fcntl.h>
#include<unistd.h>
#include <time.h>
#include <sys/time.h>
#include <errno.h> 

#define PORT 5555
#define RECV_NO 250
//#define	RECV_TIMES 10

typedef struct sockaddr ADDR;

int main(int argc, char *argv[])
{
	ssize_t n;
	int serverfd,port;
	int k=0;
	struct sockaddr_in myaddr,peeraddr;
	struct timeval tv; 
	struct timeval tvnow,tvnowb;
	
	FILE * fp; 
	extern int errno;  
	char file[]="handle_delay_test1_send.txt"; /*需要各自修改*/
	int on = 1;
	char buf[124]= {};

	struct Record 
	{ 		
		time_t sec; 
		suseconds_t usec; 
	};
	struct Record record[RECV_NO+1];

	if(argc < 1)
	{
		printf("the usage :%s",argv[0]);
		exit(-1);
	}
	if((serverfd = socket(PF_INET,SOCK_DGRAM,0)) < 0)
	{
		perror("fail t socket");
		exit(-1);
	}

	myaddr.sin_family = PF_INET;
	myaddr.sin_port = htons(PORT);
	myaddr.sin_addr.s_addr = inet_addr("10.42.0.255");
	
	setsockopt(serverfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(on));
	
	socklen_t peerlen = sizeof(peeraddr);
	

	gettimeofday(&tvnow,NULL); 
  	printf("nowtime %ld:%ld\n",tvnow.tv_sec,tvnow.tv_usec);

	memset(buf,0,sizeof(buf));

	k=0;
	memset(buf,k,1);

	while(k<RECV_NO)
	{
		gettimeofday(&tv, NULL);
		if(tv.tv_sec==tvnow.tv_sec+1&&tv.tv_usec<100000)//每1s发送一次广播
		{
			sendto(serverfd,buf,sizeof(buf),0,(ADDR *)&myaddr,16);
			gettimeofday(&tvnow,NULL);
			printf(" %d send_after time %ld:%ld %d B\n",k+1,tvnow.tv_sec,tvnow.tv_usec,sizeof(buf));
			record[k].sec=tvnow.tv_sec;
			record[k++].usec=tvnow.tv_usec;

			memset(buf,0,sizeof(buf));
			memset(buf,k,1);//报文中包含序号

			printf("buff=%s\n",buf);
		}	
	}
	close(serverfd);

	fp=fopen(file,"a+"); //数据存储到文件中
	if(fp==NULL) 
	{ 
		printf("cant't open file %s.\n",file); 
		printf("errno:%d\n",errno); 
		printf("ERR  :%s\n",strerror(errno)); 
		return; 
	} 
	else 
	{ 
		printf("%s was opened.\n",file);       
	} 
	for(k=0;k<RECV_NO;k++)
	{
		fprintf(fp,"%d send_after time %ld:%ld \n",k+1,record[k].sec,record[k].usec);
	}
	fprintf(fp,"\n");//分开每组数据
	printf("%d records was written into %s.\n",k,file);
	fclose(fp);
	
	return 0 ;
}

[代码] udp_receive.c
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<string.h>
#include<fcntl.h>
#include<unistd.h>
#include <errno.h> 

#define RECV_NO 250

typedef struct sockaddr ADDR;

int main(int argc, char *argv[])
{
	ssize_t n;
	char buf[2];
	int k=0,serverfd,nread=0;
	struct sockaddr_in myaddr,peeraddr;
	struct timeval tv;
	FILE * fp; 
	extern int errno;  
	char file[]="handle_delay_test1_recv.txt"; 
	
	struct Record 
	{ 
		time_t sec; 
		suseconds_t usec;  
	};
	struct Record record[RECV_NO+1];

	if(argc < 1)
	{
		printf("the usage :%s",argv[0]);
		//printf("the usage :%s ip port",argv[0]);
		exit(-1);
	}
	if((serverfd = socket(PF_INET,SOCK_DGRAM,0)) < 0)
	{
		perror("fail t socket");
		exit(-1);
	}
	myaddr.sin_family = PF_INET;
	myaddr.sin_port =htons(5555);		//绑定端口监听
	myaddr.sin_addr.s_addr = INADDR_ANY;	//系统会自动填入本机IP地址。
	
  	if(bind(serverfd,(ADDR *)&myaddr ,sizeof(myaddr)) < 0)
	{
		perror("fail to  bind");
		exit(-1);
	}
	socklen_t peerlen = sizeof(peeraddr);
	while(k<RECV_NO)
	{	//nread为输出字符的实际长度,buff是读缓冲。
		if(0<recvfrom(serverfd,buf,2,0,(ADDR *)&peeraddr,&peerlen))    
		{
			gettimeofday(&tv,NULL);
	 		printf(" %d time %ld:%ld\n",k+1,tv.tv_sec,tv.tv_usec);
			record[k].sec=tv.tv_sec;
			record[k++].usec=tv.tv_usec;			
		}
	}
	close(serverfd);
	 
	fp=fopen(file,"a+"); 
	if(fp==NULL) 
	{ 
		printf("cant't open file %s.\n",file); 
		printf("errno:%d\n",errno); 
		printf("ERR  :%s\n",strerror(errno)); 
		return; 
	} 
	else 
	{ 
		printf("%s was opened.\n",file);       
	} 
	for(k=0;k<RECV_NO;k++)
		fprintf(fp,"%d time %ld:%ld\n",k+1,record[k].sec,record[k].usec);
	fprintf(fp,"\n");//分开每组数据
	printf("%d records was written into %s.\n",k,file);
	fclose(fp);	

	return 0 ;
}



作者:huaxi1902 发表于2013-1-13 21:06:02 原文链接
阅读:41 评论:0 查看评论

    
[2]windows命令行中巧妙使用for命令
    来源: 互联网  发布时间: 2013-11-19

参考:http://www.it.com.cn/f/edu/047/5/7703.htm

在命令提示符后键入“For /?”来获得具体帮助,中文的,很棒!

For命令的具体格式如下: 

  For %variable IN (set) do command [command-parameters] 
  %variable——指定一个单一字母可替换的参数 
  (set)——指定一个或一组文件,可以使用通配符 
  command——指定对每个文件执行的命令 
  command-parameters——为特定命令指定参数或命令行开关 
  在批处理文件xx.bat中使用 For 命令时,指定变量请使用“%%variable”,而不要用“ %variable”。变量名称是区分大小写的。


由于For命令的用法和参数非常多,变化复杂,可以在命令提示符后键入“For /?”来获得具体帮助。下面我们将直接讲述For命令的具体用法。 

  1. 给文本文件批量加上落款 
  我们可以一次性地给所有文件添加上落款,假如我们要给放在“ABCDE”目录下的所有文本文件加上落款。那么就请先建一个名为Address.txt的文本文件,录入通信地址、QQ、E-mail等等信息,保存到E盘的根目录。 

  再新建一个文本文件,录入以下内容: 

  MD E:\TEMPabcde 
  for /r E:\ABCDE %%I in (*.txt) do copy %%I+E:\address.txt E:\tempABCDE\ 
  for /r E:\tempABCDE %%I in (*.txt) do copy %%I E:\ABCDE\ 
  echo y|del E:\TEMPabcde 
  echo y|rd E:\TEMPabcde 
  录入完毕,经检查确认无误后,另存为“给文件加落款.bat”,也保存到E盘的根目录。现在,只需双击此批处理文件,就可以为E:\ABCDE文件夹中所有的TXT文件加上落款。 
  晨风提示:For命令指定参数“%I”从“E:\ABCDE”文件夹中的所有文本文件中取值 ;“/r”参数表示包括子目录。 
  2. 批量获取文件列表 
  如果我们需要制作某个目录下的文件清单,如电影文件的文件清单,可以用For命令来轻松完成。我们以制作F盘上的所有RM格式的电影文件的清单为例: 
  先在F盘根目录下建一个名为“列文件清单.bat”的文本文件,然后输入以下内容并保存: 
  For /r F:\ %%i in (*.rm) DO @echo %%~fi >>F:\RMList.txt 
  双击此批处理文件,即可快速列出F盘上所有的以RM为扩展名的电影文件的清单。 
  晨风提示:For命令指定参数“%i”从F盘的所有以RM为扩展名的文件中取值;“@echo %%fi”表示将所有的RM文件及其完整路径显示出来;“>>F\RMList.txt”表示将输出结果重定向到F\RMList.txt文件中,打开该文件,即可看到详细的目录清单;“f”表示完整路径。还可以使用“%n”(文件名)、“%x”(文件扩展名)、“%d”(驱动器)、“%p”(路径)、“%s”(完整路径)、“%t”(文件日期)、“%z”(文件大小)等参数。 

  3. 快速删除磁盘上的空文件夹 
  假设我们要清理D盘上的空文件夹,那么请先用记事本建一个名为“kill.bat”的文件,在该文件中输入以下内容: 
  dir d:\ /ad /b /s |sort /r >>d:\kill.txt 
  For /f %%i in (d:\kill.txt) DO rd %%i 
  echo y |del d:\kill.txt 
  先查找并删除全部“Thumbs.db”文件,然后双击该文件,D盘上所有的空文件夹很快就消失的无影无踪了。 
  晨风提示:“dir d:\”表示列D盘上的所有目录包括子目录列表,其中参数“/

    
[3]创建网站服务(Web Services)
    来源: 互联网  发布时间: 2013-11-19

创建网站服务(Web Services)

 

 

除了调用网站服务之外,我们还可以在 F# 中创建网站服务,这也非常简单。事实上,当创建一个网站服务时,主要问题可能是通过网站服务器暴露代码。网站服务器以 URL 的形式,接收对于文件的请求,我们必须告诉网站服务器,这个请求将映射到哪一个 .NET类。通常,用 .asmx 文件运行特定的 F# 类,将响应对这个网站服务的请求,如果网站服务器获得一个对这个 .asmx 文件的请求。准确的实现方法取决于你的开发环境,和托管你服务的这个网站服务器。

Visual Studio 2005 带有一个内置的网站服务器,因此,创建一个新网站站点,大约只是择文件-新建-网站,然后,选择这个网站的位置。

这个站点将只运行那些用 C# 或者 Visual Basic .NET 中写出页面,因此,还需要把 F# 项目添加到这个解决方案中,然后,手工修改这个解决方案文件,以便它驻留在这个网站目录中。听上去复杂,做起来很更容易。只需要复制 .fsharpp 文件到网站目录,用记事本打开 .sln 文件,修改这个 .fsharpp 文件的路径。之后,只需要配置这个项目文件输出库,写到 bin 子目录。

这似乎要一定的努力,但之后,只要按下 F5 就行了,你的项目将自动编译并运行。

如果没有 Visual Studio 2005,那么下一步要做的最好事情就是在互联网信息服务(IIS,微软自己的用于 Windows 的网站服务器)中托管这个站点。在某种意义上,这个比托管在 Visual Studio 中更容易,但并不方便,只是编码一旦完成,就能执行代码了。为了在 IIS 中托管代码,需要创建一个 IIS 的虚拟目录,有一个子目录 bin。然后,需要复制你的 .asmx 页面和 web.config 文件到这个虚拟目录中。

注意 用 ASP.NET 来处理 F# 和 Apache 是可能,但比起使用或者不使用 Visual Studio 2005,情况要更困难一些,更多细节参见下面的页面: http://strangelights.com/FSharp/Foundations/default.aspx/fsharpfoundations.hostingwebservices。

服务本身很简单。可能就是一个类,继承自 System.Web.Service.WebService,有一个无参数构造函数。也可能标志为system.web.service.webserviceattribute。如果打算公开地暴露网站服务,必须设置这个属性的 Namespace,默认是http://tempuri.org,即使不打算公开暴露服务,设置这个属性也对网站服务有更多的可管理性。那么,这个类的成员可以成为网站方法,通过简单地标志为 system.web.service.webserviceattribute。它也有大量有用属性,设置 Description 属性特别值得,这样,服务的客户端就能知道他们将获得什么。

清单 10–6 展示了一个简单网站服务的定义。创建有一个成员 Addition 的类型服务,必须有参数,以元组的风格出现。

清单 10-6 创建一个简单网站服务

 

#light

namespace Strangelights.WebServices

open System.Web.Services

#r "System.EnterpriseServices.dll"

open System.EnterpriseServices


[<WebService(Namespace =

    "http://strangelights.com/FSharp/Foundations/WebServices")>]

type Service = class

    inherit WebService

    new() = {}

    [<WebMethod(Description = "Performs integer addition")>]

    member this.Addition (x : int, y : int) = x + y

end


 

要想让网站服务器发现网站服务,需要对创建一个 .asmx文件。下面是一个.asmx 文件的示例,最重要事情是为你服务的类名设置Class 属性。当服务器接收一个对这个文件的请求,就调用适当的服务。

 

<%@ WebService Class="Strangelights.WebServices.Service" %>

 

如果你在本地运行这个服务,要测试这个服务,只需通过简单在浏览器中打开它。在浏览器中,将看到的界面如图 10-3 所示,它允许你为这个网站服务的参数给定值,并调用这个服务。



图 10-3 调用本地的网站服务

作者:hadstj 发表于2013-1-13 21:04:46 原文链接
阅读:44 评论:0 查看评论

    
最新技术文章:
▪error while loading shared libraries的解決方法    ▪版本控制的极佳实践    ▪安装多个jdk,多个tomcat版本的冲突问题
▪简单选择排序算法    ▪国外 Android资源大集合 和个人学习android收藏    ▪.NET MVC 给loading数据加 ajax 等待loading效果
▪http代理工作原理(3)    ▪关注细节-TWaver Android    ▪Spring怎样把Bean实例暴露出来?
▪java写入excel2007的操作    ▪http代理工作原理(1)    ▪浅谈三层架构
▪http代理工作原理(2)    ▪解析三层架构……如何分层?    ▪linux PS命令
▪secureMRT Linux命令汉字出现乱码    ▪把C++类成员方法直接作为线程回调函数    ▪weak-and算法原理演示(wand)
▪53个要点提高PHP编程效率    ▪linux僵尸进程    ▪java 序列化到mysql数据库中
▪利用ndk编译ffmpeg    ▪活用CSS巧妙解决超长文本内容显示问题    ▪通过DBMS_RANDOM得到随机
▪CodeSmith 使用教程(8): CodeTemplate对象    ▪android4.0 进程回收机制    ▪仿天猫首页-产品分类
▪从Samples中入门IOS开发(四)------ 基于socket的...    ▪工作趣事 之 重装服务器后的网站不能正常访...    ▪java序列化学习笔记
▪Office 2010下VBA Addressof的应用    ▪一起来学ASP.NET Ajax(二)之初识ASP.NET Ajax    ▪更改CentOS yum 源为163的源
▪ORACLE 常用表达式    ▪记录一下,AS3反射功能的实现方法    ▪u盘文件系统问题
WEB前端 iis7站长之家
▪Perl 正则表达式 记忆方法    ▪.NET MVC 给loading数据加 ajax 等待laoding效果    ▪java 类之访问权限
▪extjs在myeclipse提示    ▪xml不提示问题    ▪Android应用程序运行的性能设计
▪sharepoint 2010 自定义列表启用版本记录控制 如...    ▪解决UIScrollView截获touch事件的一个极其简单有...    ▪Chain of Responsibility -- 责任链模式
▪运行skyeye缺少libbfd-2.18.50.0.2.20071001.so问题    ▪sharepoint 2010 使用sharepoint脚本STSNavigate方法实...    ▪让javascript显原型!
▪kohana基本安装配置    ▪MVVM开发模式实例解析    ▪sharepoint 2010 设置pdf文件在浏览器中访问
▪spring+hibernate+事务    ▪MyEclipse中文乱码,编码格式设置,文件编码格...    ▪struts+spring+hibernate用jquery实现数据分页异步加...
▪windows平台c++开发"麻烦"总结    ▪Android Wifi几点    ▪Myeclipse中JDBC连接池的配置
▪优化后的冒泡排序算法    ▪elasticsearch RESTful搜索引擎-(java jest 使用[入门])...    ▪MyEclipse下安装SVN插件SubEclipse的方法
▪100个windows平台C++开发错误之七编程    ▪串口转以太网模块WIZ140SR/WIZ145SR 数据手册(版...    ▪初识XML(三)Schema
▪Deep Copy VS Shallow Copy    ▪iphone游戏开发之cocos2d (七) 自定义精灵类,实...    ▪100个windows平台C++开发错误之八编程
▪C++程序的内存布局    ▪将不确定变为确定系列~Linq的批量操作靠的住...    ▪DIV始终保持在浏览器中央,兼容各浏览器版本
▪Activity生命周期管理之三——Stopping或者Restarti...    ▪《C语言参悟之旅》-读书笔记(八)    ▪C++函数参数小结
▪android Content Provider详解九    ▪简单的图片无缝滚动效果    ▪required artifact is missing.
▪c++编程风格----读书笔记(1)    ▪codeforces round 160    ▪【Visual C++】游戏开发笔记四十 浅墨DirectX教程...
▪【D3D11游戏编程】学习笔记十八:模板缓冲区...    ▪codeforces 70D 动态凸包    ▪c++编程风格----读书笔记(2)
▪Android窗口管理服务WindowManagerService计算Activity...    ▪keytool 错误: java.io.FileNotFoundException: MyAndroidKey....    ▪《HTTP权威指南》读书笔记---缓存
▪markdown    ▪[设计模式]总结    ▪网站用户行为分析在用户市场领域的应用
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3