C#網路程式設計-簡單的通訊原始碼
Form1.cs
***********************************************************
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Sensor
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
NetClient net;
private void Form1_Load(object sender, EventArgs e)
{
net = new NetClient();
}
private void button1_Click(object sender, EventArgs e)
{
net.ConnectToHost("172.20.130.48",3000);
}
private void button2_Click(object sender, EventArgs e)
{
net.WriteData("client send hello to server");
}
}
}
NetClient.cs
***********************************************************
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Windows.Forms;
namespace Sensor
{
class NetClient
{
//網路的客戶端連線
public NetClient()
{
//建構函式
}
Socket client;
string ip;
int port;
byte[] buff = new byte[1024];
public void ConnectToHost(string ip,int port)
{
//這個可以直接用來連線公網IP
this.ip = ip;
this.port = port;
Socket cli = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
cli.BeginConnect(ip, port, new AsyncCallback(Connected), cli); //開始連線(非同步的)
}
private void Connected(IAsyncResult ias)
{
//回撥函式:IAsyncResult ias表示回撥
client = (Socket)ias.AsyncState;
if (client.Connected)
{
Console.WriteLine("連線成功!!!");
//label1.Text = String.Format("連線成功!!!");
client.BeginReceive(buff,0,buff.Length,0,new AsyncCallback(ReadyRead),client); //開始接受資料到buff緩衝區,用ReadyRead返回
}
else
{
Console.WriteLine("連線失敗!!!");
}
}
private void ReadyRead(IAsyncResult ias)
{
//非同步的讀
Socket cli = (Socket)ias.AsyncState;
int length = cli.EndReceive(ias);//讀完
if (length > 0)
{
//>0則對資料處理
byte[] tmp = new byte[length];
Array.Copy(buff, tmp, length);//拷貝到buff
Console.WriteLine(Encoding.Default.GetString(tmp));
cli.BeginReceive(buff, 0, buff.Length, 0, new AsyncCallback(ReadyRead), client);
}
else
{
Console.WriteLine("長度<0 ->網路斷開");
}
}
public void WriteData(string data)
{
//非同步傳送資料
byte[] value = Encoding.Default.GetBytes(data);
this.client.BeginSend(value,0,value.Length,0, new AsyncCallback(ReadyWrite), client);
}
private void ReadyWrite(IAsyncResult ias)
{
Socket cli = (Socket)ias.AsyncState;
int len = cli.EndSend(ias);
}
}
}
***********************************************************
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Sensor
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
NetClient net;
private void Form1_Load(object sender, EventArgs e)
{
net = new NetClient();
}
private void button1_Click(object sender, EventArgs e)
{
net.ConnectToHost("172.20.130.48",3000);
}
private void button2_Click(object sender, EventArgs e)
{
net.WriteData("client send hello to server");
}
}
}
NetClient.cs
***********************************************************
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Windows.Forms;
namespace Sensor
{
class NetClient
{
//網路的客戶端連線
public NetClient()
{
//建構函式
}
Socket client;
string ip;
int port;
byte[] buff = new byte[1024];
public void ConnectToHost(string ip,int port)
{
//這個可以直接用來連線公網IP
this.ip = ip;
this.port = port;
Socket cli = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
cli.BeginConnect(ip, port, new AsyncCallback(Connected), cli); //開始連線(非同步的)
}
private void Connected(IAsyncResult ias)
{
//回撥函式:IAsyncResult ias表示回撥
client = (Socket)ias.AsyncState;
if (client.Connected)
{
Console.WriteLine("連線成功!!!");
//label1.Text = String.Format("連線成功!!!");
client.BeginReceive(buff,0,buff.Length,0,new AsyncCallback(ReadyRead),client); //開始接受資料到buff緩衝區,用ReadyRead返回
}
else
{
Console.WriteLine("連線失敗!!!");
}
}
private void ReadyRead(IAsyncResult ias)
{
//非同步的讀
Socket cli = (Socket)ias.AsyncState;
int length = cli.EndReceive(ias);//讀完
if (length > 0)
{
//>0則對資料處理
byte[] tmp = new byte[length];
Array.Copy(buff, tmp, length);//拷貝到buff
Console.WriteLine(Encoding.Default.GetString(tmp));
cli.BeginReceive(buff, 0, buff.Length, 0, new AsyncCallback(ReadyRead), client);
}
else
{
Console.WriteLine("長度<0 ->網路斷開");
}
}
public void WriteData(string data)
{
//非同步傳送資料
byte[] value = Encoding.Default.GetBytes(data);
this.client.BeginSend(value,0,value.Length,0, new AsyncCallback(ReadyWrite), client);
}
private void ReadyWrite(IAsyncResult ias)
{
Socket cli = (Socket)ias.AsyncState;
int len = cli.EndSend(ias);
}
}
}
相關文章
- 網路通訊程式設計程式設計
- C# 簡單的聊天大廳功能及原始碼(socket通訊)C#原始碼
- 網路通訊2:TCP簡單通訊TCP
- 圖解 Kafka 原始碼之 NetworkClient 網路通訊元件架構設計圖解Kafka原始碼client元件架構
- Java實驗——基於GUI的網路通訊程式設計JavaGUI程式設計
- c#實現最簡單的socket通訊C#
- NEO從原始碼分析看網路通訊原始碼
- 原始碼分析Dubbo網路通訊篇NettyClient原始碼Nettyclient
- C#通訊錄設計C#
- Golang併發程式設計程式通訊channel瞭解及簡單使用Golang程式設計
- 網路程式設計-Socket通訊程式設計
- 程式設計師修神之路--簡約而不簡單的分散式通訊基石程式設計師分散式
- 一個簡單混合協議通訊列子,物聯網和網際網路通訊。協議
- 簡單的區域網內通訊
- 網路程式設計與通訊原理程式設計
- Socket網路程式設計基礎與實踐:建立高效的網路通訊程式設計
- Kafka Broker原始碼:網路層設計Kafka原始碼
- 好用的網路通訊類API,含簡訊、號碼檢測等API
- Java網路程式設計UDP通訊原理Java程式設計UDP
- 如何設計一個好的通訊網路協議協議
- c#簡單工廠設計模式C#設計模式
- 網路通訊單元NU系列
- 簡單的Socket通訊
- 網際網路竟能如此簡單!風變程式設計改變了我對網際網路的認知程式設計
- 最簡單的C程式設計--順序程式設計C程式程式設計
- UDP協議網路Socket程式設計(java實現C/S通訊案例)UDP協議程式設計Java
- Android網路程式設計:Retrofit原始碼解析Android程式設計原始碼
- 簡單探討C#中GUI程式設計的標準事件問題C#GUI程式設計事件
- 大神!這段程式碼讓程式設計師躺賺200萬,原始碼簡單,你怎麼看?程式設計師原始碼
- 淺解硬體網路通訊+交換機晶片+通訊系統設計晶片
- socket 完成簡單的通訊
- 程式設計師程式設計時的簡單方法與技巧程式設計師
- C# .NET網路程式設計C#程式設計
- Java&Python的TCP&UDP通訊-網路程式設計JavaPythonTCPUDP程式設計
- TCP通訊客戶端和服務端簡單程式碼實現TCP客戶端服務端
- Java:基於TCP協議網路socket程式設計(實現C/S通訊)JavaTCP協議程式設計
- java多執行緒實現TCP網路Socket程式設計(C/S通訊)Java執行緒TCP程式設計
- 基於C#的簡單登入窗體設計C#
- 網路通訊