.net用sock通讯
请问下哪位大哥有.net做的sock通讯 只要能实现两台电脑互相通信就可以了。我想在源码作参考谢谢..如果有愿帮助小弟的大哥。大姐。请加我QQ。。在线等394858307谢谢.有要求也可以提的。 --------------------编程问答-------------------- 网上多的是。随便搜。 --------------------编程问答-------------------- 你有打这些字的时间,都能搜到并运行了 --------------------编程问答-------------------- UP/// --------------------编程问答-------------------- MSDN --------------------编程问答--------------------Up --------------------编程问答-------------------- 不知道 --------------------编程问答-------------------- MSDN就有了 --------------------编程问答-------------------- UP. --------------------编程问答-------------------- 客户机
namespace WindowsApplication0129
{
public partial class Form1 : Form
{
public delegate void myeventhandler( string str);
private Socket client;
private byte[]data=new byte[1024];
public Form1()
{
InitializeComponent();
}
public void SetLabelText(string str)
{
label1.Text=str;
}
public void AddListBoxItems( string str)
{
listBox1.Items.Add(str);
}
private void button1_Click(object sender, EventArgs e)//连接...
{
label1.Text = "connecting...";
Socket network = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint iep = new IPEndPoint(IPAddress.Parse("202.194.147.198"), 9050);
network.BeginConnect(iep, new AsyncCallback(Connected), network);
}
void Connected(IAsyncResult iar)
{
client = (Socket)iar.AsyncState;
try
{
client.EndConnect(iar);
string str = "connected to:" + client.RemoteEndPoint.ToString();
label1.Invoke(new myeventhandler(SetLabelText), new object[] { str });
client.BeginReceive(data, 0, data.Length, SocketFlags.None, new AsyncCallback(ReceiveData), client);
}
catch (SocketException)
{
label1.Invoke(new myeventhandler(SetLabelText), new object[] { "errror connected!" });
}
}
void ReceiveData(IAsyncResult iar)
{
Socket remote = (Socket)iar.AsyncState;
try
{
int recv = remote.EndReceive(iar);
string str = Encoding.ASCII.GetString(data, 0, recv);
listBox1.Invoke(new myeventhandler(AddListBoxItems), new object[] { str });
}
catch (ObjectDisposedException)//发送为空,回送为空,endrecerve()没有完成,就client.close()
{
label1.Invoke(new myeventhandler(SetLabelText), new object[] { "receive interrupted" });
}
catch (SocketException)//发送为空,回送为空,等待时server关闭
{
label1.Invoke(new myeventhandler(SetLabelText), new object[] { "server off" });
}
}
//send...
private void button3_Click(object sender, EventArgs e)
{
byte[] data1 = new byte[1024];
data1 = Encoding.ASCII.GetBytes(textBox1.Text);
try
{
client.BeginSend(data1, 0, data1.Length, SocketFlags.None, new AsyncCallback(SendData), client);
}
catch (NullReferenceException)//套接字还未建立时发送
{
label1.Text = "unable to send";
}
catch (SocketException)//没有服务器时发送
{
label1.Text = "unable to send";
}
catch (ObjectDisposedException)//client.close()后发送
{
label1.Text = "unable to send";
}
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
//data = Encoding.ASCII.GetBytes( label1.Text);
}
void SendData(IAsyncResult iar)
{
Socket remote = (Socket)iar.AsyncState;
remote.EndSend(iar);
//remote.BeginReceive(data, SocketFlags.None, new AsyncCallback(ReceiveData), remote);
remote.BeginReceive(data, 0, data.Length, SocketFlags.None, new AsyncCallback(ReceiveData), remote);
}
private void button2_Click(object sender, EventArgs e)
{
try
{
client.Shutdown(SocketShutdown.Send);
client.Close();
}
catch
{
label1.Text = "disconnected";
}
label1.Text = "disconnected";
}
}
} --------------------编程问答-------------------- 服务器
namespace WindowsApplication2
{
public partial class Form1 : Form
{
public delegate void myeventhandler(string str);
public void SetTextBoxText(string str)
{
if (str == " ")
textBox1.Clear();
else
textBox1.Text=str;
}
public void AddListBoxItems(string str)
{
listBox1.Items.Add(str);
}
private byte[] data = new byte[1024];
private Socket s;
public Form1()
{
InitializeComponent();
s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9050);
s.Bind(ipep);
s.Listen(10);
s.BeginAccept(new AsyncCallback(Accept), s);
}
public void Accept(IAsyncResult iar)
{
Socket s1 = (Socket)iar.AsyncState;
Socket server= s1.EndAccept(iar);
string str = "connected to:" + server.RemoteEndPoint.ToString();
textBox1.Invoke(new myeventhandler(SetTextBoxText), new object[] { str });
string str1 = "welcome to my server";
byte[] data1 = new byte[1024];
data1=Encoding.ASCII.GetBytes(str1);
server.BeginSend(data1, 0, data1.Length, SocketFlags.None, new AsyncCallback(SendData), server);
}
public void SendData(IAsyncResult iar)
{
Socket server = (Socket)iar.AsyncState;
server.EndSend(iar);
server.BeginReceive(data, 0, data.Length, SocketFlags.None, new AsyncCallback(ReceiveData), server);
}
public void ReceiveData(IAsyncResult iar)
{
Socket server = (Socket)iar.AsyncState;
try
{
int recv = server.EndReceive(iar);
if (recv == 0)
{
server.Close();
textBox1.Invoke(new myeventhandler(SetTextBoxText), new object[] { " " });
s.BeginAccept(new AsyncCallback(Accept), s);
return;
}
string str = Encoding.ASCII.GetString(data, 0, recv);
listBox1.Invoke(new myeventhandler(AddListBoxItems), new object[] { str });
server.BeginSend(data, 0, recv, SocketFlags.None, new AsyncCallback(SendData), server);
}
catch (SocketException)
{
server.Close();
s.BeginAccept(new AsyncCallback(Accept), s);
}
}
private void button1_Click(object sender, EventArgs e)
{
Close();
}
}
} --------------------编程问答-------------------- 这个帖子没意义 --------------------编程问答-------------------- 我在网上找了几个...但是都不是自己想要的... --------------------编程问答-------------------- 一个简单的。。效果达不到。。复杂的呢。又看不懂
补充:.NET技术 , C#