C#网络编程-简单的通信源码
来源:互联网 发布:淘宝客服招聘真假 编辑:程序博客网 时间:2024/04/26 15:00
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);
}
}
}
阅读全文
0 0
- C#网络编程-简单的通信源码
- C#实现简单的网络通信
- C#网络编程TCP通信实例程序简单设计
- C#网络编程TCP通信实例程序简单设计
- C#网络编程--简单
- 网络编程之简单网络通信
- 网络编程之简单网络通信
- C# 网络编程(1)——C# 简单实现局域网内通信
- C#网络编程TCP通信的粘包问题讨论
- 解决C#网络通信编程的阻塞问题
- linux 网络编程之最简单的tcp通信服务端
- linux 网络编程之最简单的tcp通信客户端
- Python的socket网络编程1 sock简单通信实现
- 网络编程中最简单的TCP通信(CS模型)
- C#版 Socket编程(最简单的Socket通信功能
- C# 网络编程实例 UDP TCP通信
- 相互通信的网络编程
- C# 简单的聊天通信
- java语法基础
- Nginx和Tengine概述及安装、启动
- PAT b1007题解
- MapReduce整体流程
- secure boot原理
- C#网络编程-简单的通信源码
- 正则表达式
- Maven 打War包时报错,JDWP exit error JVMTI_ERROR_WRONG_PHASE(112)
- PAT b1008题解
- android 快速开发之复制当前行
- ORB—SLAM2学习记录2-ORB_SLAM2运行自己的数据集
- 适应多种智能电表通信规约的无线抄表解决方案
- 数据库常见死锁原因及处理
- PAT b1009题解