【教程】pascal网络编程
pascal吧
全部回复
仅看楼主
level 6
riaqn 楼主
材料准备好了。满10楼就发。
2011年11月26日 10点11分 1
level 6
riaqn 楼主
法克 回一帖真的这么难?
2011年11月26日 12点11分 2
level 6
riaqn 楼主
好吧 先开始。输入法不给力,打字慢很正常。
2011年11月26日 12点11分 3
level 6
riaqn 楼主
—————————————————————————————————————————
pascal是OI指定的语言,这一点似乎决定了PASCAL在数学问题外毫无用处。以前我也是这么认为的。现在我知道,他还是有一点用处的。比如说----网络编程。
PASCAL下的网络应用是可行的。freepascal的RTL中就自带了SOCKET单元。这个就是用来联网的模块。可惜这个模块编的比较底层,再加上网络本身是个很复杂的东西,所以不好用。这里我向大家介绍另外一个第三方的socket library:synapse

2011年11月26日 13点11分 4
level 6
快,我在等!
2011年11月26日 14点11分 6
level 6
我很想用pascal做点实用的小软件
2011年11月26日 14点11分 7
level 6
riaqn 楼主
这吧里人也太少了吧 有人么
2011年11月27日 00点11分 8
level 1
楼主快更,很多人都在看。
2011年11月27日 00点11分 10
level 6
riaqn 楼主
马上。刚才因为放了一个SYNAPSE的网址,结果被抽了。
2011年11月27日 00点11分 11
level 6
riaqn 楼主
我擦,又被抽了。百度你这不是坑爹么。打了半天。
2011年11月27日 01点11分 13
level 6
riaqn 楼主
一、下载并安装synapse
百度发不了网址,请自行谷歌,注意必须是谷歌。搜索Ararat Synapse
进去后进入download版,下载stable release。下载来一个名为synapse39.zip的文件,解压,得到下述结构:
/docs 帮助文件
/source/lib 运行库,也就是俗称的单元(uses)
/source/demo 自带的范例文件,有一些作为范例的程序源代码
如果你坚信自己的英语水平,不妨看看帮助文件,位于\docs\help\index.html
现在我们开始安装。虽名之曰“安装”,实际上非常简单。将/source/lib复制到FPC\2.x.x\units\i386-win32\下即可。后者是fpc默认的单元文件所在。"i386-win32"还是其他根据你的系统环境而定。注意你的FPC版本必须是2.x.x
至此安装就完成了。现在我们可以开始写程序了(这么简单?)

2011年11月28日 12点11分 14
找不到stable release 求截图
2013年08月18日 01点08分
谷歌被封
2015年03月28日 12点03分
能发下网盘连接吗?
2015年04月03日 13点04分
level 6
riaqn 楼主
二、编写简单程序
好吧我承认,下面许多内容都翻译自Daniel15的博客。
下文中说的Socket,你可以这样理解:我们读写文件的时候,常需要类似text的类型。所有文件操作均对于这个变量,并且实际作用于那个文件上。这里的Socket类似,实际上代表了这个连接。
在大多数情况下,你会使用TTCPBlockSocket类型。这个类型属于blcksock单元,所以在你的程序中加入下面这个单元声明:
uses blcksock;
下面是一个使用blcksock单元编写网络程序的示例
1.连接到服务器
这也许是你使用Socket时最普遍的方式——直接连接到另一台服务器。这个功能的函数包含在TTCPBlockSocket类型里面。首先,我们需要定义一个变量来存储这个Socket:
var
sock: TTCPBlockSocket;
然后我们自然需要创建这个Socket:
sock := TTCPBlockSocket.Create;
上述语句创造了一个叫sock的Socket类型变量,我们可以使用她了。下一步是连接到远程服务器,使用Connect过程:
sock.Connect('66.79.183.71', '80');
// 是否发生错误?
if sock.LastError <> 0 then
begin
writeLn('Could not connect to server.');
halt(1);
end;
现在,到远程服务器的连接已经被建立,我们可以发送和接受数据了。
2.发送数据
发送数据的过程通过SendString过程实现。注意她和其他一些语言的轻微区别;他不会自动在字符串后加换行符。你需要手工添加换行符,如果这是必要的。
sock.SendString('GET /blog/ HTTP/1.1'
#13#
10'Host: www.daniel15.com'#13#10#13#10);
3.接受数据
blcksock 单元提供了很多接受数据的过程,但是主要的两个是RecvString和RecvPacket。RecvString从Socket读入单个的字符串,以换行符结束,并且返回一个没有换行符的字符串。RecvPacket则会读入所有等待被读的数据,并且毫无修改地返回这个字符串(所有换行符都仍会在那儿)。两个命令都需要一个参数:超时时间(timeout)。如果这个Socket在timeout内没有任何数据,则会返回一个空白的字符串。
buffer := sock.RecvPacket(2000);
现在我们把上面的语句串联起来。
这是一个简单的程序,连接一个web服务器,进行一次简单的询问,并将返回内容打印在屏幕上。
program TestApp;
uses
blcksock;
var
sock: TTCPBlockSocket;
procedure Main();
var
buffer: String = '';
begin
sock := TTCPBlockSocket.Create;
sock.Connect('66.79.183.71', '80');
// 是否发生错误?
if sock.LastError <> 0 then
begin
writeLn('Could not connect to server.');
halt(1);
end;
// 发送一个HTTP请求
sock.SendString('GET /blog/ HTTP/1.1'
#13#
10'Host: www.daniel15.com'#13#10#13#10);
// 保持循环
repeat
buffer := sock.RecvPacket(2000);
write(buffer);
// 直到没有更多的数据
until buffer = '';
end;
begin
Main();
end.
循环是需要的,因为数据可能通过多个包传输。
这个并不是一个很好的示例,因为在synapse中,已经内建了HTTP单元(名为httpsend)。内建的HTTP单元有很多好处,包括使用HTTP代理,以及更简单的调用。然而blcksock是最基本的单元。也许我会在以后的文章中涉及。
2011年11月28日 13点11分 15
host:后面要跟什么东西,有详细的解释吗
2014年10月24日 11点10分
level 6
riaqn 楼主
后面还有,耐心等。
这帖是不是该精?我发现这吧里有很多小p孩。
2011年11月29日 11点11分 16
楼主求更多资料[email protected]
2013年08月16日 23点08分
回复 该账号存在危险 :http://synapse.ararat.cz/doc/help/
2013年08月17日 00点08分
还以为有中文资料[汗]
2013年08月17日 03点08分
回复 该账号存在危险 :这软件本来就不太常见。。。
2013年08月18日 00点08分
level 14
mark
2013年08月17日 01点08分 17
level 12
神坟
2013年08月17日 01点08分 18
level 6
挖坟
2013年10月12日 12点10分 19
你好。[吐舌]
2013年10月12日 12点10分
回复 riaqn :能不能把Ararat Synapse下载地址给我,我找不到
2013年10月12日 12点10分
回复 riaqn :楼主能不能讲一下SYNAPSE各种单元的用法
2013年10月12日 13点10分
回复@yab770224 :synapse.ararat.czI
2013年10月12日 13点10分
level 6
@革命家的右手
的确要精I
2013年10月12日 13点10分 20
level 14
好贴,@EXPsta 加精I
2013年10月13日 00点10分 21
你先看看这多早的贴了
2013年10月13日 00点10分
回复 EXPsta :可是楼主在哪……给加精以鼓励,肯定还有其他的东西呢!
2013年10月13日 00点10分
level 14
2013年10月13日 00点10分 22
楼主已经转语言多久了。。。
2013年10月13日 00点10分
回复 EXPsta :其实也没多久,年初的时候自学了C,所以大半年不解触pascal了。因此此帖不可能更新了,请见谅。(其实官网上有很详细的教程)
2013年10月13日 00点10分
@riaqn 楼主 pascal在底层比c语言差吗?
2017年03月21日 09点03分
level 6
我已经知道自己写单元了
2013年10月13日 12点10分 23
1 2 尾页