菜鳥學習程式設計之C#編制同步套接字基礎伺服器?

學習目標:

使用Socket類的Bind方法繫結本地主機。使用Listen方法監聽埠,使用Accept接收連線請求。使用NetWorkStream類的Read方法讀取資料,使用Write方法傳送資料。為了避免程式等待,使用THread類的Start方法是執行緒同步。

菜鳥學習程式設計之C#編制同步套接字基礎伺服器

編制同步套接字基礎伺服器#

工具/原料

VSC#程式設計軟體

Socket套接字

方法/步驟

1、開啟專案,新增窗體,修改名稱為“同步套接字基礎伺服器”。

菜鳥學習程式設計之C#編制同步套接字基礎伺服器

編制同步套接字基礎伺服器#

2、在窗體新增相應的控制元件,設計窗體介面。

菜鳥學習程式設計之C#編制同步套接字基礎伺服器

編制同步套接字基礎伺服器#

菜鳥學習程式設計之C#編制同步套接字基礎伺服器

編制同步套接字基礎伺服器#

3、窗體控制元件建立完畢之後,開啟程式碼介面,開始編制程式。

//1、首先,新增以下三個引用,2016年10月12日23:12:14 lys

using System.Net;

using System.Net.Sockets;

using System.Threading;

//2、//新增私有成員,2016年10月12日23:14:37 lys

private IPAddress myIP = IPAddress.Parse("192.168.2.102");

private BindIPEndPoint MyServer;

private Socket sock;

private bool check = true;

private Socket accSock;

菜鳥學習程式設計之C#編制同步套接字基礎伺服器

編制同步套接字基礎伺服器#

點選“開始監聽”按鈕,在按鈕事件下新增程式碼。

//(3)"開始監聽"按鈕的Click事件的程式碼

private void button1_Click(object sender, EventArgs e)

{

try

{

myIP = IPAddress.Parse(textBox1.Text);

}

catch

{

MessageBox.Show("您輸入的IP地址不正確,請重新輸入!");

}

try

{

Thread thread = new Thread(new ThreadStart(accp));

thread.Start();

}

catch(Exception ee){textBox3.AppendText(ee.Message );}

}

菜鳥學習程式設計之C#編制同步套接字基礎伺服器

編制同步套接字基礎伺服器#

5、

//(4)執行緒同步方法accp的程式碼。

private void accp()

{

MyServer = new IPEndPoint(myIP, Int32.Parse(textBox2.Text));

sock = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);

sock.Listen(50);

textBox3.AppendText("主機"+textBox1.Text+"埠"+textBox2.Text+"開始監聽....\r\n");

accSock=sock.Accept();

if(accSock.Connected )

{

textBox3.AppendText("與客戶端建立連線");

while(check)

{

Byte[] Rec=new Byte[64];

NetworkStream netStream=new NetworkStream (accSock);

netStream.Read(Rec,0,Rec.Length);

string RecMessage=System.Text.Encoding.BigEndianUnicode.GetString(Rec);

richTextBox1.AppendText(RecMessage+"\r\n");

}

}

}

菜鳥學習程式設計之C#編制同步套接字基礎伺服器

編制同步套接字基礎伺服器#

6、//(5)"傳送資訊"按鈕的Click的程式碼。

private void button2_Click(object sender, EventArgs e)

{

try

{

Byte[] sendByte = new Byte[64];

string send = richTextBox1.Text + "\r\n";

NetworkStream networkStream = new NetworkStream(accSock);

sendByte = System.Text.Encoding.BigEndianUnicode.GetBytes(send.ToCharArray());

networkStream.Write(sendByte, 0, sendByte.Length);

}

catch { MessageBox.Show("連線尚未建立!無法傳送!"); }

}

菜鳥學習程式設計之C#編制同步套接字基礎伺服器

編制同步套接字基礎伺服器#

7、//(6)"停止監聽"按鈕的Click的程式碼。2016年10月13日0:31:50 lys

private void button3_Click(object sender, EventArgs e)

{

try

{

sock.Close();

textBox3.AppendText("主機"+textBox1.Text+"埠"+textBox2.Text+"開始監聽....\r\n");

string send = richTextBox1.Text + "\r\n";

NetworkStream networkStream = new NetworkStream(accSock);

}

catch { MessageBox.Show("監聽尚未開始!關閉無效!"); }

}

菜鳥學習程式設計之C#編制同步套接字基礎伺服器

編制同步套接字基礎伺服器#

菜鳥學習程式設計之C#編制同步套接字基礎伺服器

編制同步套接字基礎伺服器#

8、點選“除錯”。點擊發送,彈出視窗,傳送成功。

菜鳥學習程式設計之C#編制同步套接字基礎伺服器

編制同步套接字基礎伺服器#

9、點選”接受“,顯示傳送的資料正常。2016年10月13日0:59:30

【由於今天時間太晚了,具體除錯過程,待續。。。。。】

菜鳥學習程式設計之C#編制同步套接字基礎伺服器

編制同步套接字基礎伺服器#

注意事項

為了避免程式等待,使用THread類的Start方法是執行緒同步。

基礎, 伺服器, 菜鳥, 編制, 套接字,
相關問題答案