當前位置:編程學習大全網 - 編程語言 - c#通過程序如何通過網口發送和接受數據?

c#通過程序如何通過網口發送和接受數據?

socket-client

----------------------------------------------

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Net;

using System.Net.Sockets;

using System.Threading;

namespace socket_client

{

//客戶端

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

Control.CheckForIllegalCrossThreadCalls = false;

}

Socket s;//聊天用

Thread th;

//連接

private void button1_Click(object sender, EventArgs e)

{

//步驟1 配置遠程服務器信息

IPEndPoint removeServer = new IPEndPoint(IPAddress.Parse(textBox1.Text), int.Parse(textBox2.Text));

//步驟2 創建套接字

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

//步驟3 套接字連接遠程服務器

s.Connect(removeServer);

//步驟4 提示連接狀態

if (s.Connected)

{

label4.Text = "連接服務器成功!";

//步驟5 循環接收服務器發來的消息

th = new Thread(new ThreadStart(BB));

th.IsBackground = true;

th.Start();

}

}

void BB()

{

while (true)

{

byte[] bb = new byte[1024];

int i= s.Receive(bb); //接收數據,返回每次接收的字節總數

string removeMsg = Encoding.Unicode.GetString(bb,0,i);

if (removeMsg == "CMD--EXIT")//收到的是退出通知

{

label4.Text = "無連接";

DialogResult re=MessageBox.Show("服務器已經關閉.\n\"確定\"後退出程序,\n\"取消\"繼續停留!", "消息提示:", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);

MessageBox.Show(re.ToString());

if (re == DialogResult.OK)

{

sendExit();//告訴服務器我退出了

Application.Exit();

}

return;

}

richTextBox1.AppendText(removeMsg+"\n") ;

richTextBox1.ScrollToCaret();

}

}

//發送消息

private void button3_Click(object sender, EventArgs e)

{

string msg = "客戶端:" + richTextBox2.Text;

byte[] bb = Encoding.Unicode.GetBytes(msg);

s.Send(bb);

richTextBox2.Text = "";

richTextBox2.Focus();

}

//發送“客戶端退出提示”

void sendExit()

{

string cmd = "CMD--EXIT";

byte[] bb = Encoding.Unicode.GetBytes(cmd);

s.Send(bb);

}

}

}

socket-server

--------------------------------------------------------------

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Net;

using System.Net.Sockets;

using System.Threading;

namespace socket_server

{

//服務器

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

Control.CheckForIllegalCrossThreadCalls = false; //可以調試時,不捕捉控件創建線程錯誤

}

Thread th;

Socket s1;//監聽用

Socket s2;//聊天用

//監聽

private void button1_Click(object sender, EventArgs e)

{

IPAddress ip = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0];

//步驟1 創建網絡端點IPEndPoint

IPEndPoint myServer = new IPEndPoint(ip, 888);

//步驟2 創建套接字Socket

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

//步驟3 套接字綁定到網絡端點

s1.Bind(myServer);

label1.Text = ip+": 888 \n等待客戶端連接......";

th = new Thread(new ThreadStart(AA));

th.IsBackground = true;

th.Start();

}

void AA()

{

//步驟4 監聽

s1.Listen(5);

//步驟5 接受客戶端連接

s2 = s1.Accept();

//步驟6 判斷連接狀態

if (s2.Connected)

{

label1.Text = "已有客戶端連接!";

//步驟7 循環接收客戶端消息

while (true)

{

byte[] bb = new byte[1024];

int i= s2.Receive(bb);

string removeMsg = Encoding.Unicode.GetString(bb,0,i);

if (removeMsg == "CMD--EXIT")//收到的是退出通知

{

label1.Text = "客戶端已經取消了連接";

return;

}

richTextBox1.AppendText( removeMsg+"\n" );

richTextBox1.ScrollToCaret();

}

}

}

//停止監聽

private void button2_Click(object sender, EventArgs e)

{

sendExit();//告訴客戶端

s2.Shutdown(SocketShutdown.Both);

s1.Close();

th.Abort();

label1.Text = "無連接";

}

//發送消息

private void button3_Click(object sender, EventArgs e)

{

string msg = "服務器:" + richTextBox2.Text;

byte[] bb = Encoding.Unicode.GetBytes(msg);

s2.Send(bb);

richTextBox2.Text = "";

richTextBox2.Focus();

}

//發送“服務器退出提示”

void sendExit()

{

string cmd = "CMD--EXIT";

byte[] bb = Encoding.Unicode.GetBytes(cmd);

s2.Send(bb);

}

}

}

  • 上一篇:app原生開發和混合開發的區別?
  • 下一篇:佛祖講的"十二因緣"具體是哪些?
  • copyright 2024編程學習大全網