1. 程式人生 > >用pascal寫的最簡單的winsock程式

用pascal寫的最簡單的winsock程式

我把socket程式設計教程的第一個例子改寫了一下
伺服器接受客戶資訊,再反送回去

實際上是直接呼叫win api
在delphi4下用命令列編譯
dcc32 -cc server1.pas
用windows自帶的telnet測試

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: Word;
  wHighVersion: Word;
  szDescription: array[0..WSADESCRIPTION_LEN] of Char;
  szSystemStatus: array[0..WSASYS_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 to exit winsocket');
readln(str);
wsstatus:=WSACleanup();//退出winsocket;
write('WSACleanup = ');
writeln(wsstatus);
end;
writeln;
writeln('Press to exit');
readln(str);
end.

 補充日期: 2000-07-22 10:37:10

二進位制程式碼在 http://mamahu.363.net/server1.exe
我要離開南京了,臨行前做個紀念,我會想念大家的

BTW: .abu. , how about "http://www.patching.net" now?

相關推薦

pascal簡單winsock程式

我把socket程式設計教程的第一個例子改寫了一下伺服器接受客戶資訊,再反送回去實際上是直接呼叫win api在delphi4下用命令列編譯dcc32 -cc server1.pas用windows自帶的telnet測試server1.pas:program server1;

pascal簡單winsock程式 --收藏轉貼

我把socket程式設計教程的第一個例子改寫了一下伺服器接受客戶資訊,再反送回去實際上是直接呼叫win api在delphi4下用命令列編譯dcc32 -cc server1.pas用windows自帶的telnet測試 server1.pas:program server1

socket一個簡單的聊天程式

服務端程式碼: # 建立socket物件:socket.socket()——>繫結IP地址和埠:bind——>監聽:listen——># 得到請求:accept——>接收請求:recv——>傳送資訊:send——>關閉close   i

Go一個簡單的Selpg命令列程式

設計說明 【程式簡介】 Selpg從標準輸入或從作為命令列引數給出的檔名讀取文字輸入。它允許使用者指定來自該輸入並隨後將被輸出的頁面範圍,然後輸出到標準輸出或是檔案中。 【程式設計】 程式的功能分為以下幾個部分: 讀取一條命令列輸入的指令 解析命令,分析其中

python一個簡單的使用者登陸程式(要求成函式)

效能要求: 原始碼: dict1={} def log(): global dict1 print("|---新建使用者:N/n---|") print("|---賬戶登入:

Thinkphp簡單程式在命令列執行(非 Thinkphp 下的cli模式 而是php下的命令模式)

本來是打算用Thinkphp下的cli命令模式 執行程式的,但不知道哪裡出錯了,沒法跑起來 於是就有了下篇程式碼。 首先 用Thinkphp寫個簡單的程式,保證頁面上訪問輸出正常。 再在命令列 輸入 php index.php --start=1 --end=9 (--st

集合一個簡單的隨機分組,以及集合內元素數量查詢

移除 以及 表示 元素 move spa color 查詢 println 12個人,隨機分為4組 public static void main(String[] args) { List list = new ArrayList();

【轉】Python建立簡單的web服務器

web服務 localhost 服務器 pos 根目錄 cal body -m -- 利用Python自帶的包可以建立簡單的web服務器。在DOS裏cd到準備做服務器根目錄的路徑下,輸入命令: python -m Web服務器模塊 [端口號,默認8000]

python一個簡單的excel表格獲取當時的linux系統信息

psutil 生成 之前 建立 set ces ext 流量 關閉 最近在學習excel表格的制作,順便結合之前學習的內容,利用python的兩個模板,分別是獲取系統信息的psutil,和生成excel表格的xlsxwriter。利用這兩個模板將生成一個簡單的excel表格

Canvas一個簡單的遊戲--別踩白塊兒

來吧 ber -c [] for 輸入 itl event 內部   第一次寫博客也不知怎麽寫,反正就按照我自己的想法來吧!怎麽說呢?還是不要扯那些多余的話了,直接上正題吧! 第一次用canvas寫遊戲,所以挑個簡單實現點的來幹:別踩白塊兒,其他那些怎麽操作的那些就不用再扯

shell一個簡單的告警系統

shell用shell寫一個簡單的告警系統 創建目錄結構 mkdir -p /usr/local/sbin/mon/{bin,conf,shares,mail,log} mon //主目錄 bin //主程序目錄 shares //子程序目錄 mail //發郵件目錄 log //日誌目錄 程序主入

JavaScript一個簡單的計算器

res scroll ref 簡單的 精度 arguments alt inf create 本文使用js實現了一個簡單的加、減、乘、除計算器。 以下是css部分代碼: *{ padding:0; margin:0; color: #424242;

一個簡單程式讓你理解多徑通道

原文地址:https://wenku.baidu.com/view/f4bb76fe941ea76e58fa044d.html 時變、多徑是無線通道的特點,相信很多人在看了很多書之後,對無線通道感覺還是一頭霧水。為什麼多徑導致頻率選擇性?為什麼多普勒頻移反映了通道的時變性?對這些問題感覺困惑的肯

socket一個簡單的聊天程序

cli list t對象 bind bre hid lis 結束 聊天 服務端代碼: # 創建socket對象:socket.socket()——>綁定IP地址和端口:bind——>監聽:listen——># 得到請求:accept——>接收請求:r

node簡單的靜態服務器

exist text 本地 控制 erro binary node quest png 直接上代碼吧,我把它命名為 app.js, 只要在該文件所在目錄下,控制臺運行 node app.js 即可啟動一個本地服務器了。 /** * 服務器 * Author je

webmagic一個簡單的網路爬蟲

用webmagic寫一個網路爬蟲(不是註解) 引入的jar包: 具體程式碼如下: import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import

王權富貴基礎篇:numpy做簡單的單層感知器

上面就是最簡單的單層感知器,由多個輸入,一個輸出。 這個是一個完整的流程,做到右是正向傳播,右到左是更新權值。 雖然現在有TF,CAFF可以一句話寫出下面這些,不過對於努力提高的同學來說,用基礎程式碼實現基礎功能還是很有意義的。   現在開始用numpy搭建網路

C#一個簡單的進度介面

介面設計如下: 實現類: public partial class FormProgressInfo : Form { public FormProgressInfo(int nMinimum = 0, int nMaximum = 100) { InitializeCom

Qt Quick Lession3 (QML一個簡單的顏色選擇器)

先看一下效果圖: 實現功能:點選不同的色塊可以改變文字的顏色。 實現步驟: 一、建立一個預設的Qt Quick工程:     二、新增檔案Cell.qml 這一步主要是為了實現一個自定義的元件,這個元件就是我們看到的那個色塊,很明顯定義

CSS一個簡單的幻燈片效果頁面

fill for tar mode stat xpl fir ng- 語法規則 這裏是修真院前端小課堂,每篇分享文從 【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴展思考】【更多討論】【參考文獻】 八個方面深度解析前端知識/技能,本篇分享的是: 【用CSS