用pascal寫的最簡單的winsock程式 (轉)
我把socket教程的第一個例子改寫了一下 補充日期: 2000-07-22 10:37:10 二進位制程式碼在
接受客戶資訊,再反送回去
實際上是直接win
在4下用命令列編譯
dcc32 -cc server1.pas
用自帶的測試
server1.pas:
program server1;
uses windows,winsock;
const myport=1414;//預定義口
{type
sockaddr_in = record
case Integer of
0: (sin_family: u_short;
sin_port: u_short;
sin_addr: TInAddr;
sin_zero: array[0..7] of Char);
1: (sa_family: u_short;
sa_data: array[0..13] of Char)
end;
TSockAddrIn = sockaddr_in;
PSOCKADDR = ^TSockAddr;
TSockAddr = sockaddr_in;
WSAData = record // !!! also WSDATA
wVersion: ;
wHighVersion: Word;
szDescription: array[0..WSADESCRIPTION_LEN] of Char;
szSystemStatus: array[0..WYS_STATUS_LEN] of Char;
iMaxSockets: Word;
iMaxUdpDg: Word;
lpVendorInfo: PChar;
end;
TWSAData = WSAData;
end
}
var str:string;
s,ns:TSocket;//type:u_int|integer;
ver:word;
rece:TWSAData;//type:WSAData;
wsstatus:integer;//winsocket_status;
i,pktlen:integer;
szd:array[0..WSADESCRIPTION_LEN] of Char;
szs:array[0..WSASYS_STATUS_LEN] of Char;
server:TSockAddr;//tpye:sockaddr_in
client:PSockAddr;//type:^sockaddr_in
namelen:PInteger;//type:^Integer;
buf:array[0..1023] of char;
begin
ver:=514;
write('WSAStartup = ');
try
wsstatus:=WSAStartup(ver,rece);
//初始化winsock;在windows下是必須的過程
writeln(wsstatus);//winsock狀態,0代表成功
if wsstatus=0 then
begin
writeln;
writeln('********************************************************************************');
//以下顯示winsock狀態
write('wVersion = ');
writeln(rece.wVersion);
write('wHighVersion = ');
writeln(rece.wHighVersion);
write('iMaxSockets = ');
writeln(rece.iMaxSockets);
write('iMaxUdpDg = ');
writeln(rece.iMaxUdpDg);
writeln('szDescription is ');
for i:=0 to WSADESCRIPTION_LEN do write(szd[i]);
writeln;
writeln('szSystemStatus is ');
for i:=0 to WSASYS_STATUS_LEN do write(szs[i]);
writeln;
writeln('********************************************************************************');
end;
write('socket = ');
s:=socket(AF_INET,SOCK_STREAM,0);
//第一步,建立伺服器的socket,0表示成功
writeln(s);
if s<0 then exit;
write('bind = ');
server.sin_family := AF_INET;
server.sin_port := htons(myport);
server.sin_addr.s_addr := INADDR_ANY;
wsstatus:=bind(s,server,sizeof(server));
//第二步,繫結,0表示成功
writeln(wsstatus);
if wsstatus<>0 then exit;
write('listen = ');
wsstatus:=listen(s,5);
//第三步,
writeln(wsstatus);
if wsstatus<>0 then exit;
write('accept = ');
new(client);
new(namelen);
namelen^:=sizeof(client^);
ns:=accept(s,client,namelen);
//第四步,等待接收
//注:bind時傳遞的是sockaddr_in結構的資料,accept時是兩個指標!!!
if ns=-1 then //以下可以做成多執行緒過程
begin
writeln(-1);
exit;
end
else
begin
writeln(ns);
pktlen:=0;
writeln('recv');
repeat
pktlen:= recv(ns,buf,1024,0);//接收資料
//pktlen=為接收長度,0表示斷開聯接,<0表示失敗
sleep(1);
write(pktlen:5);
if pktlen>0 then
begin
i:=send(ns,buf,pktlen,0);//返回資料
end;
until pktlen<1;//迴圈直到客戶斷開聯接
end;
finally
writeln;
writeln('********************************************************************************');
writeln('Press
readln(str);
wsstatus:=WSACleanup();//退出winsocket;
write('WSACleanup = ');
writeln(wsstatus);
end;
writeln;
writeln('Press
readln(str);
end.
我要離開南京了,臨行前做個紀念,我會想念大家的
BTW: .abu. , how about "" now?
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-987343/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 用Java編寫一個最簡單的桌面程式Java
- 用最簡單的方式理解 IoC 控制反轉
- PDF轉文字檔案的最簡單方法
- 可能是世界上最簡單的用 Go 來寫 WebAssembly 的教程GoWeb
- 手寫簡單的元件化跳轉Router元件化
- 最簡單的mybatis自動程式碼生成MyBatis
- 幽默:最簡單的SpringBoot微服務程式碼Spring Boot微服務
- 編寫簡單的Java程式碼:HelloWoridJava
- 藍橋杯-移動距離(最簡單的寫法)
- vue.js:最簡單的v-if運用Vue.js
- 最簡單的C程式設計--順序程式設計C程式程式設計
- 最簡單的物件建立物件
- 手把手教你編寫最簡單的效能指令碼指令碼
- 最簡單的Go Dockerfile編寫姿勢,沒有之一!GoDocker
- 最簡單的 Go Dockerfile 編寫姿勢,沒有之一!GoDocker
- 織夢CMS最簡單實用的SQL語句SQL
- python hex轉ascii轉換Python程式碼的簡單方法PythonASCII
- 寫一個簡單的程式碼生成器
- 最簡單的Flutter路由教程——跳轉、動畫與傳參Flutter路由動畫
- 簡單易用的macOS音量應用程式Mac
- Flexbox 佈局的最簡單表單Flex
- JRebel 破解最簡單的使用
- 手寫簡單的RPCRPC
- [轉]:如何快速構建一個簡單的程式
- 手把手教你手寫一個最簡單的 Spring Boot StarterSpring Boot
- 用最簡單的話告訴你什麼是ElasticSearchElasticsearch
- 用最簡單的方法實現原生 JS 放大鏡特效JS特效
- 什麼是Tomcat?用最簡單的語言描述它Tomcat
- “報錯”是程式設計世界中,最簡單的事情!程式設計
- 最簡短的話,寫給身邊的程式設計師朋友吧程式設計師
- 寫ObjectiveC介面的時候懶蟲上腦,用 Golang 寫了個簡單的程式碼生成ObjectGolang
- 怎麼用python寫簡單的遊戲指令碼?Python遊戲指令碼
- Spring入門學習手冊 1:最簡單的反轉控制Spring
- 【本人禿頂程式設計師】最簡單的設計模式——單例模式的演進和推薦寫法(Java 版)程式設計師設計模式單例Java
- 寫一個最簡陋的node框架框架
- Android最簡單的側劃選單,DrawerLayout的使用Android
- 最簡單的SpringBoot整合MyBatis教程Spring BootMyBatis
- Flutter apk最簡單的瘦身方式FlutterAPK
- 一個最簡單的web componentsWeb