新手問問題~"~ /小弟用winsock不能send還有recv |
答題得分者是:RaynorPao
|
qqqqqqqaaaaa
一般會員 發表:1 回覆:2 積分:0 註冊:2003-06-09 發送簡訊給我 |
小弟看著大大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 發送簡訊給我 |
引言: 小弟看著大大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 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
|
turboted
版主 發表:95 回覆:754 積分:452 註冊:2002-07-23 發送簡訊給我 |
|
qqqqqqqaaaaa
一般會員 發表:1 回覆:2 積分:0 註冊:2003-06-09 發送簡訊給我 |
抱歉....下面是小弟所寫的程式精簡版@@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);
}
}
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |