服务端:
private void Form1_Load(object sender, EventArgs e)
{
thread = new Thread(new ThreadStart(get));
thread.Start();
} private void get()
{
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipe = new IPEndPoint(IPAddress.Parse(getip()), 10);
socket.Bind(ipe);
isStart = true;
byte[] buff = new byte[1024];
while (isStart)
{
socket.Listen(10);
Socket conSocket = socket.Accept();
conSocket.Receive(buff);
string s = Encoding.Default.GetString(buff);
updateui(s); //在textbox显示
Thread.Sleep(200);
}
}客户端:
private void button1_Click(object sender, EventArgs e)
{
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipe=new IPEndPoint(IPAddress.Parse("192.168.0.3"),10);
socket.Connect(ipe);
if (socket.Connected)
{
MessageBox.Show("链接上了!");
}
else
{
MessageBox.Show("没有链接!");
}
} private void button2_Click(object sender, EventArgs e)
{
string s = this.richTextBox1.Text.Trim();
byte[] buff = Encoding.Default.GetBytes(s);
socket.Send(buff);
}第一次点击发送后,正常,可以显示信息,
但第二次后就不能正常显示了,
我在updateui那设断点,
发现第二次点击后都不能执行到那,这是为什么啊?怎么解决啊?大侠们帮忙啊!急!
分不够可以加!
private void Form1_Load(object sender, EventArgs e)
{
thread = new Thread(new ThreadStart(get));
thread.Start();
} private void get()
{
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipe = new IPEndPoint(IPAddress.Parse(getip()), 10);
socket.Bind(ipe);
isStart = true;
byte[] buff = new byte[1024];
while (isStart)
{
socket.Listen(10);
Socket conSocket = socket.Accept();
conSocket.Receive(buff);
string s = Encoding.Default.GetString(buff);
updateui(s); //在textbox显示
Thread.Sleep(200);
}
}客户端:
private void button1_Click(object sender, EventArgs e)
{
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipe=new IPEndPoint(IPAddress.Parse("192.168.0.3"),10);
socket.Connect(ipe);
if (socket.Connected)
{
MessageBox.Show("链接上了!");
}
else
{
MessageBox.Show("没有链接!");
}
} private void button2_Click(object sender, EventArgs e)
{
string s = this.richTextBox1.Text.Trim();
byte[] buff = Encoding.Default.GetBytes(s);
socket.Send(buff);
}第一次点击发送后,正常,可以显示信息,
但第二次后就不能正常显示了,
我在updateui那设断点,
发现第二次点击后都不能执行到那,这是为什么啊?怎么解决啊?大侠们帮忙啊!急!
分不够可以加!
解决方案 »
- C#中如何发送HTTP请求,菜鸟求帮助
- asp.net string类型怎么转换成int 类型
- 求两个表操作的SQL语句
- 关于Remoting的远程事件
- 想了好久没想出来。指高人指教!我将数据读到表后对表进行修改然后将其导出成EXECL出现错误(连ACCESS库)。
- DataGrid中数据修改的问题--请高手帮帮忙--小弟先谢了!
- C#层结构讨论
- 如何将字符串转换为GUID
- 《快来看看,ADO.NET的问题~!
- 中国VS巴西,C#各位爱好者,程序员们,放下你们的工作,大家一起来预测一下比分,猜中给分哦,来来来,大家一起来,关注中国,
- 能给一个已存在的类添加方法吗?
- 这里有人懂C++和com技术吗?懂的请进来帮俺一个大忙,谢谢啦
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Net;
using System.Net.Sockets;namespace YBFWQ
{
public partial class Form1 : Form
{
private IPAddress myIP = IPAddress.Parse("127.0.0.1");
private IPEndPoint MyServer;
private Socket mySocket;
private Socket handler;
private static ManualResetEvent myReset = new ManualResetEvent(false);
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
try
{
IPHostEntry myHost = new IPHostEntry();
myHost = Dns.GetHostByName(textBox1.Text);
string IPsting = myHost.AddressList[0].ToString();
myIP = IPAddress.Parse(IPsting);
}
catch { MessageBox.Show("您输入的IP地址格式不正确,请重新输入!"); }
try
{
MyServer = new IPEndPoint(myIP, Int32.Parse(textBox2.Text));
mySocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
mySocket.Bind(MyServer);
mySocket.Listen(50);
textBox3.AppendText("主机" + textBox1.Text + "端口" + textBox2.Text + "开始监听...\r\n");
Thread thread = new Thread(new ThreadStart(target));//为什么要启动个线程呢????
thread.Start();
}
catch (Exception ee) { textBox3.AppendText(ee.Message + "\r\n"); }
}
private void target()
{
while (true)
{
//设为终止
myReset.Reset();
mySocket.BeginAccept(new AsyncCallback(AcceptCallback), mySocket);
//阻塞当前线程
myReset.WaitOne();
}
}
private void AcceptCallback(IAsyncResult ar)
{
//将事件设为终止
myReset.Set();
Socket listener = (Socket)ar.AsyncState;
handler = listener.EndAccept(ar);
StateObject state = new StateObject();
state.workSocket = handler;
textBox3.AppendText("与客户建立连接。\r\n");
try
{
byte[] byteDate = System.Text.Encoding.BigEndianUnicode.GetBytes("已经准备好,请通话!\r\n");
handler.BeginSend(byteDate, 0, byteDate.Length, 0, new AsyncCallback(SendCallback), handler);
}
catch (Exception ee) { MessageBox.Show(ee.Message); }
Thread thread = new Thread(new ThreadStart(begReceive));
thread.Start(); }
private void SendCallback(IAsyncResult ar)
{
try
{
handler = (Socket)ar.AsyncState;
int bytesSent = handler.EndSend(ar); }
catch (Exception eee)
{
MessageBox.Show(eee.Message);
}
}
private void begReceive()
{
StateObject state = new StateObject();
state.workSocket = handler;
handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state);
}
private void ReadCallback(IAsyncResult ar)
{
StateObject state = (StateObject)ar.AsyncState;
Socket tt = state.workSocket;
int bytesRead = handler.EndReceive(ar);
state.sb.Append(System.Text.Encoding.BigEndianUnicode.GetString(state.buffer, 0, bytesRead));
string content = state.sb.ToString();
state.sb.Remove(0, content.Length);
richTextBox1.AppendText(content + "\r\n");
tt.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state);
} private void button2_Click(object sender, EventArgs e)
{
try
{
byte[] byteData = System.Text.Encoding.BigEndianUnicode.GetBytes(richTextBox2.Text + "\n\r");
handler.BeginSend(byteData, 0, byteData.Length, 0, new AsyncCallback(SendCallback), handler);
}
catch (Exception ee) { MessageBox.Show(ee.Message); }
} private void button3_Click(object sender, EventArgs e)
{
try
{
mySocket.Close();
textBox3.AppendText("主机" + textBox1.Text + "端口" + textBox2.Text + "监听停止!\r\n");
}
catch { MessageBox.Show("监听尚未开始,关闭无效!"); }
}
}
}
{
while (true)
{
//设为终止
myReset.Reset();
mySocket.BeginAccept(new AsyncCallback(AcceptCallback), mySocket);
//阻塞当前线程
myReset.WaitOne();
}
}
线程回调,和异步回调的。这是我照书上的例子,你看看吧?
2:谁说要异步操作,也他吗的是垃圾。
3:你只能收一次数据是因为你他吗的 Socket conSocket = socket.Accept();会阻止,直接有新的连接来看,所以你他吗的只能收一次。