VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

winsock cannot send chr(129) or upper ?

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
kf11



註冊時間: 2009-11-28
文章: 6


第 1 樓

發表發表於: 星期六 十一月 28, 2009 11:43 pm    文章主題: winsock cannot send chr(129) or upper ? 引言回覆

請各位指教

Q1. the server side does not receive correctly for chr(129) onwards, please comment. It displayed chr(63) . ... chr(0).... and then stopped at chr(255).

Q2. And further, the server side displayed 0 and then stopped receiving after the first chr(0)?


client side send button as below:

sendmessage=""
for i= 0 to 255
sendmessage = sendmessage+chr(i)
endfor
sendit = createbinary(sendmessage)


IF ThisForm.tcpClient.Object.State = 7
ThisForm.tcpClient.Object.SendData(sendit)
ELSE
WAIT WINDOW "Not connected." TIMEOUT 1
ENDif
回頂端
檢視會員個人資料 發送私人訊息
tinwhang



註冊時間: 2009-11-08
文章: 104


第 2 樓

發表發表於: 星期日 十一月 29, 2009 12:41 am    文章主題: Re: winsock cannot send chr(129) or upper ? 引言回覆

kf11 寫到:
請各位指教

Q1. the server side does not receive correctly for chr(129) onwards, please comment. It displayed chr(63) . ... chr(0).... and then stopped at chr(255).

Q2. And further, the server side displayed 0 and then stopped receiving after the first chr(0)?


client side send button as below:

sendmessage=""
for i= 0 to 255
sendmessage = sendmessage+chr(i)
endfor
sendit = createbinary(sendmessage)
^^請問您這個程式是什麼做用的? 自動控制?
您那個程程式 ascii 129是沒東西的吧
http://home.educities.edu.tw/wanker742126/asm/ap04.html

IF ThisForm.tcpClient.Object.State = 7
ThisForm.tcpClient.Object.SendData(sendit)
ELSE
WAIT WINDOW "Not connected." TIMEOUT 1
ENDif
回頂端
檢視會員個人資料 發送私人訊息
kf11



註冊時間: 2009-11-28
文章: 6


第 3 樓

發表發表於: 星期日 十一月 29, 2009 10:34 am    文章主題: 引言回覆

tinwhang 多謝賜教

這程式是想通過TCP連接到一個硬件, 而內容是 byte 的data 或控制碼. 所謂send side 指 PC side 而 server side 指接收方的硬件. 因此利用fox pro 的 winsock control作為通訊, 把0 - 255 由PC 通過TCP送到指定的IP address.

在測試方面, 寫了client 和 server 兩個程式,
connect , accept , close , send , data arrival 原全無問題

當內容是 data byte = 1 - 128 原全無問題

*********************************************************
client side send button click 如下

sendmessage=""
for i= 1 to 128
sendmessage = sendmessage+chr(i)
endfor
sendit = createbinary(sendmessage)

IF ThisForm.tcpClient.Object.State = 7 && winsock connected = 7
ThisForm.tcpClient.Object.SendData(sendit) && send data as characters
ELSE
WAIT WINDOW "Not connected." TIMEOUT 1
ENDif

*******************************************************
server side data arrival event 如下

LPARAMETERS bytestotal
strData=space(bytestotal)
This.Object.GetData(@strData, , bytestotal) && receive and clear buffer

release rx
public rx[bytestotal]

for i=1 to bytestotal
rx[i] = asc(substr(strdata,i,1)) && recover the data to number
endfor
displaytext = ""

for i=1 to bytestotal
xx = alltrim(str(rx[i]))
do case
case len(xx) = 1
xx = "00"+xx
case len(xx) = 2
xx = "0"+xx
endcase
displaytext = displaytext +xx + " "
endfor

ThisForm.edit1.Value = thisform.edit1.value + displaytext

***********************************************************
server side edit 1 output 是

001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128

當data 是 1 - 128 原全正常
************************************************************

當data 一改為 1 - 255 時 output 如下
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 063 063 063 063 063 063 063 063 063 063 063 063 063 063 063 063 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 162 126 251 252 253 254 255 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000

由129起亂了,

Q1. 在server 方output, 遇到data > 128 都亂, 是winsock 或 foxpro 問題? 我使用VFP6.0.
***********************************************************

另一個情況如果 data = 0 - 128

server side output 如下

000 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032

接收 byte count 是 129, 是正確,可是由於第一byte 是 0, windsock 就錯了.

Q2. 是否winsock 不能接受第一byte 是0, 又或是foxpro問題? 我使用VFP6.0.

請指教
回頂端
檢視會員個人資料 發送私人訊息
tinwhang



註冊時間: 2009-11-08
文章: 104


第 4 樓

發表發表於: 星期日 十一月 29, 2009 8:34 pm    文章主題: 引言回覆

ThisForm.tcpClient.Object.SendData(sendit) && send data as characters
SendData(sendit)<----這是什麼?
回頂端
檢視會員個人資料 發送私人訊息
kf11



註冊時間: 2009-11-28
文章: 6


第 5 樓

發表發表於: 星期日 十一月 29, 2009 10:48 pm    文章主題: 引言回覆

SendData(sendit)<----這是什麼?

要傳送的data 有可能是 0 至 255 , 因此要測試所有可能的data, 情況就好像送 control code 到printer 一樣, 多謝賜教.
回頂端
檢視會員個人資料 發送私人訊息
tinwhang



註冊時間: 2009-11-08
文章: 104


第 6 樓

發表發表於: 星期日 十一月 29, 2009 10:57 pm    文章主題: 引言回覆

kf11 寫到:
SendData(sendit)<----這是什麼?

要傳送的data 有可能是 0 至 255 , 因此要測試所有可能的data, 情況就好像送 control code 到printer 一樣, 多謝賜教.

應該是您寫的SendData有問題吧 不應該將
ThisForm.tcpClient.Object.SendData(sendit) && send data as characters 這句話應該就是你的問題所在
回頂端
檢視會員個人資料 發送私人訊息
kf11



註冊時間: 2009-11-28
文章: 6


第 7 樓

發表發表於: 星期日 十一月 29, 2009 11:16 pm    文章主題: 引言回覆

ThisForm.tcpClient.Object.SendData(sendit) && send data as characters

這句中的 SendData() 就是 winsock 中的其中一個 method. 作用是張string characters 傳送到指定的 IP address.

而 ThisForm.tcpClient.Object 就是 winsock control, 因此問題也可能出在winsock 或 foxpro.

如果有經驗使用 winsock 傳送 number ( 0 - 255), 請賜教.
回頂端
檢視會員個人資料 發送私人訊息
tinwhang



註冊時間: 2009-11-08
文章: 104


第 8 樓

發表發表於: 星期日 十一月 29, 2009 11:31 pm    文章主題: 引言回覆

我覺得您這個程式,自我編碼,到硬體的那端再 自行組碼起來 會比較容易 ,因為你傳的129的字元 根本就有問題
?sendit 列印一下你就會明白我說的什麼意思

您那個是做什麼的? LED 面板?
回頂端
檢視會員個人資料 發送私人訊息
kf11



註冊時間: 2009-11-28
文章: 6


第 9 樓

發表發表於: 星期日 十一月 29, 2009 11:54 pm    文章主題: 引言回覆

tinwhang 多謝賜教

但硬件方面的protocol不能改, 只好找法子張number 0 - 255 經 winsock 來傳送.

其實用於 MScomm也有類似情況, 經 comport 傳出去之前就用cratebinay(chr(129)),張data 轉成 binary character, 這方法是可行的.

但 createbinary(chr(129)) 在 winsock 傳送出現問題.
回頂端
檢視會員個人資料 發送私人訊息
lee0119



註冊時間: 2013-05-29
文章: 6


第 10 樓

發表發表於: 星期二 四月 02, 2019 1:57 pm    文章主題: 引言回覆

請問在WINSOCK傳送CHR(129)這個問題有解決方式嗎?謝謝
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作