學習目標:
使用Socket類的Bind方法繫結本地主機。使用Listen方法監聽埠,使用Accept接收連線請求。使用NetWorkStream類的Read方法讀取資料,使用Write方法傳送資料。為了避免程式等待,使用THread類的Start方法是執行緒同步。
。
編制同步套接字基礎伺服器#
工具/原料
VSC#程式設計軟體
Socket套接字
方法/步驟
1、開啟專案,新增窗體,修改名稱為“同步套接字基礎伺服器”。
編制同步套接字基礎伺服器#
2、在窗體新增相應的控制元件,設計窗體介面。
編制同步套接字基礎伺服器#
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;
編制同步套接字基礎伺服器#
點選“開始監聽”按鈕,在按鈕事件下新增程式碼。
//(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 );}
}
編制同步套接字基礎伺服器#
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");
}
}
}
編制同步套接字基礎伺服器#
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("連線尚未建立!無法傳送!"); }
}
編制同步套接字基礎伺服器#
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("監聽尚未開始!關閉無效!"); }
}
編制同步套接字基礎伺服器#
8、點選“除錯”。點擊發送,彈出視窗,傳送成功。
編制同步套接字基礎伺服器#
9、點選”接受“,顯示傳送的資料正常。2016年10月13日0:59:30
【由於今天時間太晚了,具體除錯過程,待續。。。。。】
編制同步套接字基礎伺服器#
注意事項
為了避免程式等待,使用THread類的Start方法是執行緒同步。