sinsftp
❶ 列舉下常用埠有哪些
netstat -a -n
中國游戲中心 TCP 8000
聯眾世界 TCP 2000 2001 2002 3004
網易泡泡 UDP 4001
邊鋒網路游戲世界 TCP 4000
中國圍棋網 TCP 9696
笨蘋果游戲互動網 UDP 5000
上海熱線游戲頻道 TCP 8000
凱思帝國游戲在線 TCP 2050
浩方 TCP 1203
網上贏家 TCP 8001
證券之星 Tcp 8888
聯眾游戲的埠號是什麼?
1007 暗棋
2000 游戲大廳
2002 聊天室
2005 麻將
3030 紅心大戰
3050 五子棋
3060 橋牌
3100 跳棋
3200 中國象棋
3300 國際象棋
3400 四國軍棋
4000~4010 GICQ
3000 圍棋
3001 俄羅斯方塊
3002 三打一
3003 鬥地主
3004 升級
3005 梭哈
3006 拱豬
3007 夠級
3008 雙扣
3010 跑得快
3012 飛行棋
3013 拼圖
3015 檯球
3016 原子
3017 510k
3018 憋7
3019 黑白棋
3020 鋤大地
3021 炒地皮
3022 炸彈人
3023 敲三家
游戲埠范圍
> 1 征服者1.0 40625 40629
> 2 征服者1.0c 40725 40727
> 3 羅馬復興 40825 40829
> 4 帝國時代 40525 40527
> 6 CS反恐精英1.5 27115 27130
> 7 CS反恐精英戰隊訓練專區 27315 27318
> 8 CS反恐精英比賽專區 27415 27417
> 9 CS反恐精英伺服器專區 27515 27530
> 10 CS反恐精英1.6 27215 27217
> 11 星際爭霸 6111 6120
> 12 魔獸爭霸3 6211 6220
> 13 冰封王座 6311 6318
> 14 紅色警戒 3000 3004
> 15 共和國之輝 3200 3202
> 16 紅警尤里復仇 3100 3102
> 17 三角洲部隊1 17624 17626
> 18 三角洲部隊3 37624 37626
> 19 FIFA2002 2048 2049
> 20 FIFA2003 2148 2149
> 21 英雄無敵3 3333 3334
> 22 突襲1.21 50626 50627
> 23 極品飛車2 2206 2207
> 24 極品飛車3 2306 2307
> 25 極品飛車5 2406 2407
> 26 暗黑破壞神I 7111 7112
> 27 暗黑破壞神II 7211 7212
> 28 流星蝴蝶劍 37105 37107
> 29 F16 26000 26001
> 30 F22 10022 10023
> 32 FIFA2004 2248 2250
> 31 CS反恐精英菜鳥天地 27015 27017
沖擊波埠
Tcp: 135, 137, 139, 445
Msn埠:
Tcp 1863, 443
msn傳文件: 埠為tcp 6891-6900等幾個埠
BT的埠是tcp:6881~6890
電驢emule的埠tcp:4661-4669
迅雷的埠tcp:3077
poco的埠:udp:9000 udp:5356 tcp:5354
屏蔽以下地址(16個)後,pp 2005無法登陸。
58.17.4.10
60.24.125.13
60.145.116.233
60.176.133.73
60.179.0.49
60.211.7.149
60.222.48.244
61.47.144.27
61.167.193.65
61.145.118.218
202.121.50.51
218.75.110.195
220.175.8.84
220.175.8.100
221.203.230.25
222.33.116.192
*****
游戲
*****
3300/3550 i/o A3
3724 i/o 魔獸
6112 i/o 魔獸
6881 i/o 魔獸
6999 i/o 魔獸
7777 i/o Unreal:Klingon Honor Guard
7778 i/o Unreal:Tournament
22450 i/o Sin
26000 i/o Quake
26900 i/o HexenWorld
27005 i/o CS
27015 i/o CS
27500 i/o QuakeWorld
27910 i/o Quake 2
44405 UDP i/o 傳奇(UDP監聽埠)
55557 UDP i/o 傳奇(UDP監聽埠)
55901 i/o 傳奇(游戲埠)
55960 i/o 傳奇(數據交換埠)
55962 i/o 傳奇(數據交換埠)
55970 i/o 傳奇(監聽埠)
禁用QQ、MSN、UC
利用添加IP規則,攔截以下IP的埠,實現禁止辦公網路內禁止聊天。
以下是常用的聊天工具的伺服器IP以及埠,
QQ 所使用的Port: TCP 8000---8001;443
UDP 8000--1429
QQ所用到的IP地址有:
218.17.209.23 ; 218.17.217.106; 218.18.95.135; 218.18.95.153 ;218.18.95.163
218.18.95.165; 218.18.95.219 ; 218.18.95.220; 218.18.95.221 ;218.18.95.227
218.18.95.181 ; 218.18.95.182 ;218.18.95.183 ;218.18.95.188 ;218.18.95.189
218.18.95.162 ; 218.17.217.106; 211.162.63.24; 219.133.38.9
61.144.238.15; 61.172.249.133; 61.172.249.134
MSN 所用到的地址有:(Port:TCP 1863)
207.46.106.2; 207.46.106.30; 207.46.110.100; 207.46.107.23; 207.46.106.12;
207.46.107.65; 207.46.78.94; 207.68.172.246; 207.46.104.20;
207.46.106.32; 207.46.108.20; 207.46.107.24; 207.46.107.86; 207.46.106.197;
207.46.106.42 ; 207.46.104.20 ;207.46.106.19 ;207.46.110.254
65.54.194.117 ; 64.4.33.7; 64.4.32.7; 65.54.183.195; 65.54.183.192;
65.54.194.118
203.89.193.30; 207.46.110.26 ; 207.46.110.24 ; 207.46.110.18
210.51.190.110;
UC UDP Port1 Port2
210.192.97.215 3001 3002
210.192.97.216 3001 3002
210.192.97.217 3001 3002
210.192.97.218 3001 3002
210.192.97.219 3001 3002
210.192.97.220 3001 3002
計算機常用埠一覽表。
1 傳輸控制協議埠服務多路開關選擇器
2 compressnet 管理實用程序
3 壓縮進程
5 遠程作業登錄
7 回顯(Echo)
9 丟棄
11 在線用戶
13 時間
15 netstat
17 每日引用
18 消息發送協議
19 字元發生器
20 文件傳輸協議(默認數據口)
21 文件傳輸協議(控制)
22 SSH遠程登錄協議
23 telnet 終端模擬協議
24 預留給個人用郵件系統
25 smtp 簡單郵件發送協議
27 NSW 用戶系統現場工程師
29 MSG ICP
31 MSG驗證
33 顯示支持協議
35 預留給個人列印機服務
37 時間
38 路由訪問協議
39 資源定位協議
41 圖形
42 WINS 主機名服務
43 "綽號" who is服務
44 MPM(消息處理模塊)標志協議
45 消息處理模塊
46 消息處理模塊(默認發送口)
47 NI ftp
48 數碼音頻後台服務
49 TACACS登錄主機協議
50 遠程郵件檢查協議
51 IMP(介面信息處理機)邏輯地址維護
52 施樂網路服務系統時間協議
53 域名伺服器
54 施樂網路服務系統票據交換
55 ISI圖形語言
56 施樂網路服務系統驗證
57 預留個人用終端訪問
58 施樂網路服務系統郵件
59 預留個人文件服務
60 未定義
61 NI郵件?
62 非同步通訊適配器服務
63 WHOIS+
64 通訊介面
65 TACACS資料庫服務
66 Oracle SQL*NET
67 引導程序協議服務端
68 引導程序協議客戶端
69 小型文件傳輸協議
70 信息檢索協議
71 遠程作業服務
72 遠程作業服務
73 遠程作業服務
74 遠程作業服務
75 預留給個人撥出服務
76 分布式外部對象存儲
77 預留給個人遠程作業輸入服務
78 修正TCP
79 Finger(查詢遠程主機在線用戶等信息)
80 全球信息網超文本傳輸協議(www)
81 HOST2名稱服務
82 傳輸實用程序
83 模塊化智能終端ML設備
84 公用追蹤設備
85 模塊化智能終端ML設備
86 Micro Focus Cobol編程語言
87 預留給個人終端連接
88 Kerberros安全認證系統
89 SU/MIT終端模擬網關
90 DNSIX 安全屬性標記圖
91 MIT Dover假離線
92 網路列印協議
93 設備控制協議
94 Tivoli對象調度
95 SUPDUP
96 DIXIE協議規范
97 快速遠程虛擬文件協議
98 TAC(東京大學自動計算機)新聞協議
101 usually from sri-nic
102 iso-tsap
103 ISO Mail
104 x400-snd
105 csnet-ns
109 Post Office
110 Pop3 伺服器(郵箱發送伺服器)
111 portmap 或 sunrpc
113 身份查詢
115 sftp
117 path 或 uucp-path
119 新聞伺服器
121 BO jammerkillah
123 network time protocol (exp)
135 DCE endpoint resolutionnetbios-ns
137 NetBios-NS
138 NetBios-DGN
139 win98 共享資源埠(NetBios-SSN)
143 IMAP電子郵件
144 NeWS - news
153 sgmp - sgmp
158 PCMAIL
161 snmp - snmp
162 snmp-trap -snmp
170 network PostScript
175 vmnet
194 Irc
315 load
400 vmnet0
443 安全服務
456 Hackers Paradise
500 sytek
512 exec
513 login
514 shell - cmd
515 printer - spooler
517 talk
518 ntalk
520 efs
526 tempo - newdate
530 courier - rpc
531 conference - chat
532 netnews - readnews
533 netwall
540 uucp - uucpd 543 klogin
544 kshell
550 new-rwho - new-who
555 Stealth Spy(Phase)
556 remotefs - rfs_server
600 garcon
666 Attack FTP
750 kerberos - kdc
751 kerberos_master
754 krb_prop
888 erlogin
1001 Silencer 或 WebEx
1010 Doly trojan v1.35
1011 Doly Trojan
1024 NetSpy.698 (YAI)
1025 NetSpy.698
1033 Netspy
1042 Bla1.1
1047 GateCrasher
1080 Wingate
1109 kpop
1243 SubSeven
作者: 僅剩五元 2006-9-14 11:32 回復此發言
--------------------------------------------------------------------------------
2 計算機常用埠一覽表。
1245 Vodoo
1269 Mavericks Matrix
1433 Microsoft SQL Server 資料庫服務
1492 FTP99CMP (BackOriffice.FTP)
1509 Streaming Server
1524 ingreslock
1600 Shiv
1807 SpySender
1981 ShockRave
1999 Backdoor
2000 黑洞(木馬) 默認埠
2001 黑洞(木馬) 默認埠
2023 Pass Ripper
2053 knetd
2140 DeepThroat.10 或 Invasor
2283 Rat
2565 Striker
2583 Wincrash2
2801 Phineas
3129 MastersParadise.92
3150 Deep Throat 1.0
3210 SchoolBus
3389 Win2000 遠程登陸埠
4000 OICQ Client
4567 FileNail
4950 IcqTrojan
5000 WindowsXP 默認啟動的 UPNP 服務
5190 ICQ Query
5321 Firehotcker
5400 BackConstruction1.2 或 BladeRunner
5550 Xtcp
5555 rmt - rmtd
5556 mtb - mtbd
5569 RoboHack
5714 Wincrash3
5742 Wincrash
6400 The Thing
6669 Vampire
6670 Deep Throat
6711 SubSeven
6713 SubSeven
6767 NT Remote Control
6771 Deep Throat 3
6776 SubSeven
6883 DeltaSource
6939 Indoctrination
6969 Gatecrasher.a
7306 網路精靈(木馬)
7307 ProcSpy
7308 X Spy
7626 冰河(木馬) 默認埠
7789 ICQKiller
8000 OICQ Server
9400 InCommand
9401 InCommand
9402 InCommand
9535 man
9536 w
9537 mantst
9872 Portal of Doom
9875 Portal of Doom
9989 InIkiller
10000 bnews
10001 queue
10002 poker
10167 Portal Of Doom
10607 Coma
11000 Senna Spy Trojans
11223 ProgenicTrojan
12076 Gjamer 或 MSH.104b
12223 Hack?9 KeyLogger
12345 netbus木馬 默認埠
12346 netbus木馬 默認埠
12631 WhackJob.NB1.7
16969 Priotrity
17300 Kuang2
20000 Millenium II (GrilFriend)
20001 Millenium II (GrilFriend)
20034 NetBus Pro
20331 Bla
21554 GirlFriend 或 Schwindler 1.82
22222 Prosiak
23456 Evil FTP 或 UglyFtp 或 WhackJob
27374 SubSeven
29891 The Unexplained
30029 AOLTrojan
30100 NetSphere
30303 Socket23
30999 Kuang
31337 BackOriffice
31339 NetSpy
31666 BO Whackmole
31787 Hack a tack
33333 Prosiak
33911 Trojan Spirit 2001 a
34324 TN 或 Tiny Telnet Server
40412 TheSpy
40421 MastersParadise.96
40423 Master Paradise.97
47878 BirdSpy2
50766 Fore 或 Schwindler
53001 Remote Shutdown
54320 Back Orifice 2000
54321 SchoolBus 1.6
61466 Telecommando
65000 Devil
你的這個問題太多,這里回答不下,請在網路裡面搜一下,很多的
❷ 在三菱Q系列PLC中有哪些助記符各是什麼意思
表格:
MOV A,direct 直接地址傳送到累加器 2 1。
MOV A,@Ri 累加器傳送到外部RAM(8 地址) 1 1。
MOV A,#data 立即數傳送到累加器 2 1。
MOV Rn,A 累加器傳送到寄存器 1 1。
MOV Rn,direct 直接地址傳送到寄存器 2 2。
MOV Rn,#data 累加器傳送到直接地址 2 1。
MOV direct,Rn 寄存器傳送到直接地址 2 1。
MOV direct,direct 直接地址傳送到直接地址 3 2。
MOV direct,A 累加器傳送到直接地址 2 1。
MOV direct,@Ri 間接RAM 傳送到直接地址 2 2。
MOV direct,#data 立即數傳送到直接地址 3 2。
MOV @Ri,A 直接地址傳送到直接地址 1 2。
MOV @Ri,direct 直接地址傳送到間接RAM 2 1。
MOV @Ri,#data 立即數傳送到間接RAM 2 2。
MOV DPTR,#data16 16 位常數載入到數據指針 3 1。
MOVC A,@A+DPTR 代碼位元組傳送到累加器 1 2。
MOVC A,@A+PC 代碼位元組傳送到累加器 1 2。
MOVX A,@Ri 外部RAM(8 地址)傳送到累加器 1 2。
MOVX A,@DPTR 外部RAM(16 地址)傳送到累加器 1 2。
MOVX @Ri,A 累加器傳送到外部RAM(8 地址) 1 2。
MOVX @DPTR,A 累加器傳送到外部RAM(16 地址) 1 2。
PUSH direct 直接地址壓入堆棧 2 2。
POP direct 直接地址彈出堆棧 2 2。
XCH A,Rn 寄存器和累加器交換 1 1。
XCH A,direct 直接地址和累加器交換 2 1。
XCH A,@Ri 間接RAM 和累加器交換 1 1。
XCHD A,@Ri 間接RAM 和累加器交換低4 位位元組 1 1。
INC A 累加器加1 1 1。
INC Rn 寄存器加1 1 1。
INC direct 直接地址加1 2 1。
INC @Ri 間接RAM 加1 1 1。
INC DPTR 數據指針加1 1 2。
DEC A 累加器減1 1 1。
DEC Rn 寄存器減1 1 1。
DEC direct 直接地址減1 2 2。
DEC @Ri 間接RAM 減1 1 1。
(2)sinsftp擴展閱讀:
PLC的編程一般可以使用兩種語言,一種就是梯形圖,一種就是助記符,編寫梯形圖的時候,通常都是從菜單中把指令代碼一個個拉出來的,放在界面上,而用助記符編的時候,就是靠手動輸入。大部分開發平台,都支持直接將梯形圖轉換成助記符的功能。
MOV bit, C 進位位位傳送到直接定址 2 2。JC rel 如果進位位為1 則轉移 2 2。
JNC rel 如果進位位為0 則轉移 2 2。JB bit,rel 如果直接定址位為1 則轉移 3 2。JNB bit,rel 如果直接定址位為0 則轉移 3 2。JBC bit,rel 直接定址位為1 則轉移並清除該位 2 2。
❸ 誰有辯論賽計時器的源代碼
客戶端
/* Client side of an ftp service. Actions:
- connect to server and request service
- send size-of-sile info to server
- start receiving file from server
- close connection
*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <time.h>
#include <errno.h>
#define SERVER_PORT_ID 6081
#define CLIENT_PORT_ID 6086
#define SERVER_HOST_ADDR "128.119.40.186"
/* gaia.cs.umass.e */
#define MAXSIZE 512
#define ACK 2
#define NACK 3
#define REQUESTFILE 100
#define COMMANDNOTSUPPORTED 150
#define COMMANDSUPPORTED 160
#define BADFILENAME 200
#define FILENAMEOK 400
#define STARTTRANSFER 500
int readn(int sd,char *ptr,int size);
int writen(int sd,char *ptr,int size);
main(int argc,char *argv[])
{
int sockid, newsockid,i,getfile,ack,msg,msg_2,c,len;
int no_writen,start_xfer, num_blks,num_last_blk;
struct sockaddr_in my_addr, server_addr;
FILE *fp;
char in_buf[MAXSIZE];
if(argc != 2) {printf("error: usage : sftp filename\n"); exit(0);}
no_writen = 0;
num_blks = 0;
num_last_blk = 0;
len = strlen(argv[1]);
printf("client: creating socket\n");
if ((sockid = socket(AF_INET,SOCK_STREAM,0)) < 0)
{ printf("client: socket error : %d\n", errno); exit(0);
}
printf("client: binding my local socket\n");
bzero((char *) &my_addr,sizeof(my_addr));
my_addr.sin_family = AF_INET;
my_addr.sin_addr.s_addr = htonl(INADDR_ANY);
my_addr.sin_port = htons(CLIENT_PORT_ID);
if (bind(sockid ,(struct sockaddr *) &my_addr,sizeof(my_addr)) < 0)
{printf("client: bind error :%d\n", errno); exit(0);
}
printf("client: starting connect\n");
bzero((char *) &server_addr,sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr(SERVER_HOST_ADDR);
server_addr.sin_port = htons(SERVER_PORT_ID);
if (connect(sockid ,(struct sockaddr *) &server_addr,
sizeof(server_addr)) < 0)
{printf("client: connect error :%d\n", errno); exit(0);
}
/* Once we are here, we've got a connection to the server */
/* tell server that we want to get a file */
getfile = htons(REQUESTFILE);
printf("client: sending command request to ftp server\n");
if((writen(sockid,(char *)&getfile,sizeof(getfile))) < 0)
{printf("client: write error :%d\n", errno); exit(0);}
/* want for go-ahead from server */
msg = 0;
if((readn(sockid,(char *)&msg,sizeof(msg)))< 0)
{printf("client: read error :%d\n", errno); exit(0); }
msg = ntohs(msg);
if (msg==COMMANDNOTSUPPORTED) {
printf("client: server refused command. goodbye\n");
exit(0);
}
else
printf("client: server replied %d, command supported\n",msg);
/* send file name to server */
printf("client: sending filename\n");
if ((writen(sockid,argv[1],len))< 0)
{printf("client: write error :%d\n", errno); exit(0);}
/* see if server replied that file name is OK */
msg_2 = 0;
if ((readn(sockid,(char *)&msg_2,sizeof(msg_2)))< 0)
{printf("client: read error :%d\n", errno); exit(0); }
msg_2 = ntohs(msg_2);
if (msg_2 == BADFILENAME) {
printf("client: server reported bad file name. goodbye.\n");
exit(0);
}
else
printf("client: server replied %d, filename OK\n",msg_2);
/* CLIENT KNOWS SERVER HAS BEEN ABLE TO OPEN THE FILE IN READ
MODE AND IS ASKING FOR GO-AHEAD*/
/* CLIENT NOW OPENS A COPY OF THE FILE IN WRITE MODE AND SENDS
THE GOAHEAD TO SERVER*/
printf("client: sending start transfer command\n");
start_xfer = STARTTRANSFER;
start_xfer = htons(start_xfer);
if ((writen(sockid,(char *)&start_xfer,sizeof(start_xfer)))< 0)
{printf("client: write error :%d\n", errno); exit(0);
}
if ((fp = fopen(argv[1],"w")) == NULL)
{printf(" client: local open file error \n");exit(0);}
/*NOW THE CLIENT IS READING INFORMATION FROM THE SERVER REGARDING HOW MANY
FULL BLOCKS OF SIZE MAXSIZE IT CAN EXPECT. IT ALSO RECEIVES THE NUMBER
OF BYTES REMAINING IN THE LAST PARTIALLY FILLED BLOCK, IF ANY */
if((readn(sockid,(char *)&num_blks,sizeof(num_blks))) < 0)
{printf("client: read error on nblocks :%d\n",errno);exit(0);}
num_blks = ntohs(num_blks);
printf("client: server responded: %d blocks in file\n",num_blks);
ack = ACK;
ack = htons(ack);
if((writen(sockid,(char *)&ack,sizeof(ack))) < 0)
{printf("client: ack write error :%d\n",errno);exit(0);
}
if((readn(sockid,(char *)&num_last_blk,sizeof(num_last_blk))) < 0)
{printf("client: read error :%d on nbytes\n",errno);exit(0);}
num_last_blk = ntohs(num_last_blk);
printf("client: server responded: %d bytes last blk\n",num_last_blk);
if((writen(sockid,(char *)&ack,sizeof(ack))) < 0)
{printf("client: ack write error :%d\n",errno);exit(0);
}
/* BEGIN READING BLOCKS BEING SENT BY SERVER */
printf("client: starting to get file contents\n");
for(i= 0; i < num_blks; i ++) {
if((readn(sockid,in_buf,MAXSIZE)) < 0)
{printf("client: block error read: %d\n",errno);exit(0);}
no_writen = fwrite(in_buf,sizeof(char),MAXSIZE,fp);
if (no_writen == 0) {printf("client: file write error\n");exit(0);}
if (no_writen != MAXSIZE)
{printf("client: file write error : no_writen is less\n");exit(0);}
/* send an ACK for this block */
if((writen(sockid,(char *)&ack,sizeof(ack))) < 0)
{printf("client: ack write error :%d\n",errno);exit(0);}
printf(" %d...",i);
}
/*IF THERE IS A LAST PARTIALLY FILLED BLOCK, READ IT */
if (num_last_blk > 0) {
printf("%d\n",num_blks);
if((readn(sockid,in_buf,num_last_blk)) < 0)
{printf("client: last block error read :%d\n",errno);exit(0);}
no_writen = fwrite(in_buf,sizeof(char),num_last_blk,fp);
if (no_writen == 0)
{printf("client: last block file write err :%d\n",errno);exit(0);}
if (no_writen != num_last_blk)
{printf("client: file write error : no_writen is less 2\n");exit(0);}
if((writen(sockid,(char *)&ack,sizeof(ack))) < 0)
{printf("client :ack write error :%d\n",errno);exit(0);}
}
else printf("\n");
/*FILE TRANSFER ENDS. CLIENT TERMINATES AFTER CLOSING ALL ITS FILES
AND SOCKETS*/
fclose(fp);
printf("client: FILE TRANSFER COMPLETE\n");
close(sockid);
}
/* DUE TO THE FACT THAT BUFFER LIMITS IN KERNEL FOR THE SOCKET MAY BE
REACHED, IT IS POSSIBLE THAT READ AND WRITE MAY RETURN A POSITIVE VALUE
LESS THAN THE NUMBER REQUESTED. HENCE WE CALL THE TWO PROCEDURES
BELOW TO TAKE CARE OF SUCH EXIGENCIES */
int readn(int sd,char *ptr,int size)
{ int no_left,no_read;
no_left = size;
while (no_left > 0)
{ no_read = read(sd,ptr,no_left);
if(no_read <0) return(no_read);
if (no_read == 0) break;
no_left -= no_read;
ptr += no_read;
}
return(size - no_left);
}
int writen(int sd,char *ptr,int size)
{ int no_left,no_written;
no_left = size;
while (no_left > 0)
{ no_written = write(sd,ptr,no_left);
if(no_written <=0) return(no_written);
no_left -= no_written;
ptr += no_written;
}
return(size - no_left);
}
服務端
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <time.h>
#include <errno.h>
#define MY_PORT_ID 6081
#define MAXLINE 256
#define MAXSIZE 512
#define ACK 2
#define NACK 3
#define REQUESTFILE 100
#define COMMANDNOTSUPPORTED 150
#define COMMANDSUPPORTED 160
#define BADFILENAME 200
#define FILENAMEOK 400
int writen(int sd,char *ptr,int size);
int readn(int sd,char *ptr,int size);
main() {
int sockid, newsd, pid, clilen;
struct sockaddr_in my_addr, client_addr;
printf("server: creating socket\n");
if ((sockid = socket(AF_INET,SOCK_STREAM,0)) < 0)
{printf("server: socket error : %d\n", errno); exit(0); }
printf("server: binding my local socket\n");
bzero((char *) &my_addr,sizeof(my_addr));
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(MY_PORT_ID);
my_addr.sin_addr.s_addr = htons(INADDR_ANY);
if (bind(sockid ,(struct sockaddr *) &my_addr,sizeof(my_addr)) < 0)
{printf("server: bind error :%d\n", errno); exit(0); }
printf("server: starting listen \n");
if (listen(sockid,5) < 0)
{ printf("server: listen error :%d\n",errno);exit(0);}
while(1==1) {
/* ACCEPT A CONNECTION AND THEN CREATE A CHILD TO DO THE WORK */
/* LOOP BACK AND WAIT FOR ANOTHER CONNECTION */
printf("server: starting accept\n");
if ((newsd = accept(sockid ,(struct sockaddr *) &client_addr,
&clilen)) < 0)
{printf("server: accept error :%d\n", errno); exit(0); }
printf("server: return from accept, socket for this ftp: %d\n",
newsd);
if ( (pid=fork()) == 0) {
/* CHILD PROC STARTS HERE. IT WILL DO ACTUAL FILE TRANSFER */
close(sockid); /* child shouldn't do an accept */
doftp(newsd);
close (newsd);
exit(0); /* child all done with work */
}
/* PARENT CONTINUES BELOW HERE */
close(newsd); /* parent all done with client, only child */
} /* will communicate with that client from now on */
}