C# SOCKET通信
1、socket通信中,不利用委托和事件能接收数据么?
2、我要做个TCP通信客户端,每次往服务器端发一个字符串然后接收返回的数据就好,这个需要做异步么?不用事件驱动能完成么?
[最优解释]
最好开线程.
[其他解释]
开线程把接受程序放进里面?关键是我不知道怎么能用事件和委托在每次有数据的时候就能触发接受程序呢?
[其他解释]
TcpClient tcpClient;
BackgroundWorker bgWorkder = new BackgroundWorker();
if (tcpClient != null)
{
tcpClient.Close();
tcpClient=null;
}
try
{
IPAddress ip = IPAddress.Parse(txtIp.Text);
IPEndPoint ipPoint = new IPEndPoint(ip, Convert.ToInt16(txtPort.Text));
tcpClient = new TcpClient();
tcpClient.Connect(ipPoint);
NetworkStream nStream = tcpClient.GetStream();
nStream.Write(bytTotal, 0, bytTotal.Length);
}
catch(System.Net.Sockets.SocketException ex)
{
MessageBox.Show("连接失败!");
BaseTool.LogError(ex);
return;
}
catch (Exception ex)
{
BaseTool.LogError(ex);
MessageBox.Show("未知异常:" + ex.Message);
return;
}
bgWorkder.CancelAsync();
bgWorkder.Dispose();
bgWorkder = new BackgroundWorker();
bgWorkder.WorkerSupportsCancellation = true;
bgWorkder.DoWork += new DoWorkEventHandler(bgWorkder_DoWork);
bgWorkder.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgWorkder_RunWorkerCompleted);
bgWorkder.RunWorkerAsync();
void bgWorkder_DoWork(object sender, DoWorkEventArgs e)
{
while (tcpClient.Connected)
{
if(bgWorkder.CancellationPending)
{
e.Cancel=true;
tcpClient.Close();
break;
}
NetworkStream nStream = tcpClient.GetStream();
byte[] buffer = new byte[8192];//////////////////////////数值太大!
int received = nStream.Read(buffer, 0, buffer.Length);
string recMsg = Encoding.GetEncoding("GB2312").GetString(buffer).Substring(0, received);
Thread.Sleep(10);
}
}
{
clientSocket = (Socket)ar.AsyncState;
try
{
clientSocket.EndConnect(ar);
clientSocket.BeginReceive(data, 0, datasize, SocketFlags.None, new AsyncCallback(ReceiveData), clientSocket);
}
catch
{ MessageBox.Show("与服务器连接失败"); }
}
private void ReceiveData(IAsyncResult ar)
{
try
{
Socket server = (Socket)ar.AsyncState;
int receiveDataLenth = server.EndReceive(ar);
string str = System.Text.Encoding.Unicode.GetString(data, 0, receiveDataLenth);
}
catch
{ MessageBox.Show("客户端接收数据失败"); }
}
#endregion
public Form1()
{
InitializeComponent();
}
//窗体事件
private void Form1_Load(object sender, EventArgs e)
{
myIP = IPAddress.Parse(host);
iep = new IPEndPoint(myIP, port);
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.BeginConnect(iep, new AsyncCallback(ConnectServer), socket);
}
}
[其他解释]
每次运行到clientSocket.EndConnect(ar);
就运行不动了
[其他解释]
能加下我的Q指导一下我么?313431610
[其他解释]