全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1519
推到 Plurk!
推到 Facebook!

新手問問題~"~ /小弟用winsock不能send還有recv

答題得分者是:RaynorPao
qqqqqqqaaaaa
一般會員


發表:1
回覆:2
積分:0
註冊:2003-06-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-11 22:12:16 IP:163.28.xxx.xxx 未訂閱
小弟看著大大po的winsock程式碼教學,想寫個簡單的猜拳遊戲 一直寫到server和client連線都沒問題 就是沒辦法send還有recv值, 小弟設定按剪刀那個button時會執行 void __fastcall TForm1::Button2Click(TObject *Sender) { c[0]='a'; send(s3,(const char FAR *)c,4,0); } send到server端 server端接收的指令是 recv(s2,(char FAR*)c,4,0); 可是每次執行的時候,recv(s2,(char FAR*)c,4,0)這一行常常都會直接跳過 並不會停下來等待接收 不知道是不是小弟格式搞錯了,還是說錯的地方不是這裡呢?? 因為原程式碼不知道該貼哪些部分,所以就沒貼 如果需要其他程式碼的話小弟再貼上來 煩請大大替小弟解惑囉~"~ 這是小弟第一次發問 不太懂該怎麼問 請多多包含@@
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-12 00:09:07 IP:61.221.xxx.xxx 未訂閱
引言: 小弟看著大大po的winsock程式碼教學,想寫個簡單的猜拳遊戲 一直寫到server和client連線都沒問題 就是沒辦法send還有recv值, 小弟設定按剪刀那個button時會執行 void __fastcall TForm1::Button2Click(TObject *Sender) { c[0]='a'; send(s3,(const char FAR *)c,4,0); } send到server端 server端接收的指令是 recv(s2,(char FAR*)c,4,0); 可是每次執行的時候,recv(s2,(char FAR*)c,4,0)這一行常常都會直接跳過 並不會停下來等待接收 不知道是不是小弟格式搞錯了,還是說錯的地方不是這裡呢?? 因為原程式碼不知道該貼哪些部分,所以就沒貼 如果需要其他程式碼的話小弟再貼上來 煩請大大替小弟解惑囉~"~ 這是小弟第一次發問 不太懂該怎麼問 請多多包含@@
qqqqqqqaaaaa 你好: 有沒有試過用 BCB 現成的 Socket 元件來寫呢??
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
qqqqqqqaaaaa
一般會員


發表:1
回覆:2
積分:0
註冊:2003-06-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-12 00:38:27 IP:163.28.xxx.xxx 未訂閱
小弟有想過 不過想多認識一點程式碼 正好學校課程有提到winsock 所以才想這樣寫寫看^^
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-06-12 01:07:41 IP:61.221.xxx.xxx 未訂閱
引言: 小弟有想過 不過想多認識一點程式碼 正好學校課程有提到winsock 所以才想這樣寫寫看^^
qqqqqqqaaaaa 你好: 如果是這樣子的話,先到這裡參考看看吧
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-06-12 09:23:40 IP:210.241.xxx.xxx 未訂閱
問問題,最怕的,就是問問題者,提供的資訊不足夠 讓大家瞎猜..    qqqqqqqaaaaa我建議您把一整段有問題的程式放上來 讓大家看看,最好,是精簡過的,就是可正常執行 又可發現問題的code..就好
qqqqqqqaaaaa
一般會員


發表:1
回覆:2
積分:0
註冊:2003-06-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-06-12 13:19:08 IP:163.28.xxx.xxx 未訂閱
抱歉....下面是小弟所寫的程式精簡版@@a...好像還是很長 client可以連到server 原本設定按剪刀石頭布的時候會在client端出現輸贏訊息 可是執行之後按剪刀石頭布時 完全沒反應 請大大替小弟看看哪邊有問題了~"~ #pragma package(smart_init) #pragma resource "*.dfm" #define WSAVERS MAKEWORD(2,0) int d; char c[1],a[1]; SOCKET s1,s2,s3; sockaddr_in s1a,s2a,s3a ; void main1(); void main2(); void main3(); void main4(); TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //-----------------------下面是server按鈕內的程式 void __fastcall TForm1::serverClick(TObject *Sender) { main1(); recv(s2,(char FAR*)c,4,0); main3(); } //-----------------------下面是client按鈕內的程式 void __fastcall TForm1::Button1Click(TObject *Sender) { main2(); } //-----------------------下面是剪刀按鈕內的程式 void __fastcall TForm1::Button2Click(TObject *Sender) { c[0]='a'; send(s3,(const char FAR *)c,4,0); main4(); } //------------------------下面是石頭按鈕內的程式 void __fastcall TForm1::Button3Click(TObject *Sender) { c[0]='b'; send(s3,(const char FAR *)c,4,0); main4(); } //-------------------------下面是布按鈕內的程式 void __fastcall TForm1::Button4Click(TObject *Sender) { c[0]='c'; send(s3,(const char FAR *)c,4,0); main4(); } //-------main1是server void main1() { int v; WSADATA wsadata; WSAStartup(WSAVERS,&wsadata); s1a.sin_family=PF_INET; s1a.sin_port=htons(3333); s1a.sin_addr.s_addr=INADDR_ANY; s1=socket(s1a.sin_family,SOCK_STREAM,0); s2=accept(s1,(struct sockaddr far *)&s2a,&v); closesocket(s1); closesocket(s2); WSACleanup(); } //------main2是client void main2() { WSADATA wsadata; WSAStartup(WSAVERS,&wsadata); s3a.sin_family=PF_INET; s3a.sin_port=htons(3333); s3a.sin_addr.s_addr=inet_addr("127.0.0.1"); s3=socket(s3a.sin_family,SOCK_STREAM,0); } //-------main3是設定server端判斷猜拳輸贏,判斷完傳值給client void main3() { d=rand()%3 1; if(d==1&&c[0]=='a') { a[0]='a' ; send(s2,(const char FAR *)a,4,0); } else if(d==2&&c[0]=='b') { a[0]='a' ; send(s2,(const char FAR *)a,4,0); } else if(d==3&&c[0]=='c') { a[0]='a' ; send(s2,(const char FAR *)a,4,0); } else if(d==2&&c[0]=='c') { a[0]='b' ; send(s2,(const char FAR *)a,4,0); } else if(d==3&&c[0]=='b') { a[0]='c' ; send(s2,(const char FAR *)a,4,0); } else if(d==3&&c[0]=='a') { a[0]='b' ; send(s2,(const char FAR *)a,4,0); } else if(d==1&&c[0]=='b') { a[0]='b' ; send(s2,(const char FAR *)a,4,0); } else if(d==1&&c[0]=='c') { a[0]='c'; send(s2,(const char FAR *)a,4,0); } else if(d==2&&c[0]=='a') { a[0]='b'; send(s2,(const char FAR *)a,4,0); } } //-----main4是設定client接收server的回傳值讓client可以出現輸贏訊息 void main4() { recv(s3,(char FAR*)a,4,0); if(a[0]=='a') { Application->MessageBox("平手","ccc",MB_OK); } else if(a[0]=='b') { Application->MessageBox("c贏","ccc",MB_OK); } else if(a[0]=='c') { Application->MessageBox("c輸","ccc",MB_OK); } }
系統時間:2024-04-29 14:58:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!