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);
}
}
}
相關文章
- 網路通訊程式設計程式設計
- 網路通訊2:TCP簡單通訊TCP
- C# 簡單的聊天大廳功能及原始碼(socket通訊)C#原始碼
- Linux網路程式設計之socket簡單通訊--客戶端程式碼Linux程式設計客戶端
- C#實現聯通簡訊Sgip協議程式原始碼C#協議原始碼
- Linux網路程式設計之socket簡單通訊TCP--服務端程式碼Linux程式設計TCP服務端
- 輕量級C#網路通訊元件StriveEngine —— C/S通訊開源demo(附原始碼)C#元件原始碼
- 圖解 Kafka 原始碼之 NetworkClient 網路通訊元件架構設計圖解Kafka原始碼client元件架構
- NEO從原始碼分析看網路通訊原始碼
- 【Zookeeper】原始碼分析之網路通訊(一)原始碼
- 使用Scala模擬簡單的RPC通訊,Socket程式設計RPC程式設計
- Java實驗——基於GUI的網路通訊程式設計JavaGUI程式設計
- c#實現最簡單的socket通訊C#
- 簡單設計並開發一個行動通訊程式
- C#通訊錄設計C#
- 網路程式設計-Socket通訊程式設計
- 一個簡單混合協議通訊列子,物聯網和網際網路通訊。協議
- 原始碼分析Dubbo網路通訊篇NettyClient原始碼Nettyclient
- 一個網路通訊開發庫原始碼原始碼
- Golang併發程式設計程式通訊channel瞭解及簡單使用Golang程式設計
- 簡單的區域網內通訊
- 程式設計師修神之路--簡約而不簡單的分散式通訊基石程式設計師分散式
- 網路程式設計與通訊原理程式設計
- 好用的網路通訊類API,含簡訊、號碼檢測等API
- Socket網路程式設計基礎與實踐:建立高效的網路通訊程式設計
- C# 如何實現簡單的Socket通訊(附示例)C#
- 網路通訊單元NU系列
- 簡單的Socket通訊
- Java網路程式設計UDP通訊原理Java程式設計UDP
- 【Zookeeper】原始碼分析之網路通訊(三)之NettyServerCnxn原始碼NettyServer
- 【Zookeeper】原始碼分析之網路通訊(二)之NIOServerCnxn原始碼iOSServer
- 如何設計一個好的通訊網路協議協議
- Kafka Broker原始碼:網路層設計Kafka原始碼
- C#網路程式設計經典程式碼C#程式設計
- UNIX網路程式設計 卷2:程式間通訊程式設計
- C#使用命名管道通過網路在程式之間進行通訊C#
- C++用libcurl庫進行http網路通訊程式設計C++HTTP程式設計
- Retrofit原始碼解讀(二)--Retrofit中網路通訊相關原始碼