socket发送数据求助

qfzqiou 2013-08-14 10:44:16

class AnsySocket
{
//public string str;
public class StateObject
{
public Socket workSocket = null;
public const int BufferSize = 1024;
public byte[] buffer = new byte[BufferSize];
public StringBuilder sb = new StringBuilder();
}
public class AsynchronousClient
{
private const int port = 11000;
private static ManualResetEvent connectDone = new ManualResetEvent(false);
private static ManualResetEvent sendDone = new ManualResetEvent(false);
private static ManualResetEvent receiveDone = new ManualResetEvent(false);
private static String response = String.Empty;

public static void StartClient(string ipAddr, int ipPort, string str)
{
try
{

IPAddress ipAddress = IPAddress.Parse(ipAddr);
IPEndPoint remoteEP = new IPEndPoint(ipAddress, ipPort);
Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
client.BeginConnect(remoteEP, new AsyncCallback(ConnectCallback), client);
connectDone.WaitOne();
Send(client, str);
sendDone.WaitOne();
Receive(client);
receiveDone.WaitOne();
Console.WriteLine("Response received : {0}", response);
client.Shutdown(SocketShutdown.Both);
client.Close();
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
private static void ConnectCallback(IAsyncResult ar)
{
try
{
Socket client = (Socket)ar.AsyncState;
client.EndConnect(ar);
Console.WriteLine("Socket connected to {0}",
client.RemoteEndPoint.ToString());
connectDone.Set();
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
private static void Receive(Socket client)
{
try
{
StateObject state = new StateObject();
state.workSocket = client;
client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
new AsyncCallback(ReceiveCallback), state);
}
catch (Exception e)
{

Console.WriteLine(e.ToString());
}
}
private static void ReceiveCallback(IAsyncResult ar)
{
try
{
StateObject state = (StateObject)ar.AsyncState;
Socket client = state.workSocket;
int bytesRead = client.EndReceive(ar);
if (bytesRead > 0)
{
state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, bytesRead));
client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
new AsyncCallback(ReceiveCallback), state);
}
else
{
if (state.sb.Length > 1)
{
response = state.sb.ToString();
}
receiveDone.Set();
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
private static void Send(Socket client, String data)
{
byte[] byteData = Encoding.ASCII.GetBytes(data);
client.BeginSend(byteData, 0, byteData.Length, 0, new AsyncCallback(SendCallback), client);
}
private static void SendCallback(IAsyncResult ar)
{
try
{
Socket client = (Socket)ar.AsyncState;
int bytesSent = client.EndSend(ar);
Console.WriteLine("Sent {0} bytes to server.", bytesSent);
sendDone.Set();
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
}
}


网上找的代码,看不太明白,经测试能用。我的问题是我生成的数据从哪进去,数据在怎么个程序运行过程都会不停的产生。求大神指导.
...全文
129 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
szj820 2013-08-14
  • 打赏
  • 举报
回复
你这只是客户端,还要看你服务端是怎样,才能知道怎么去处理数据最合适!! 我之前做过TCP异步长连接是这样定义的,我的需求也是客户端多个向服务端发送数据并接收服务端的接收确认。流程以下: 客户端开始连接 - 服务端接收到连接并发送“开始信息” - 客户端接收到“开始信息”开始发送“数据1”- 服务端接收到“数据1”回复“收到数据1“ - 客户端接收到“收到数据1”开始发送“数据2” - …… - 客户端服务端有一方发出中断另一方也中断结束。
qfzqiou 2013-08-14
  • 打赏
  • 举报
回复
程序里有很多用户,每个用户都有一个不同的socket连接(ip,端口都不同),每个连接不能断开
rtdb 2013-08-14
  • 打赏
  • 举报
回复
那倒不用。 基本是这样子的:

//程序启动时,连接服务器
                    Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    client.BeginConnect(remoteEP, new AsyncCallback(ConnectCallback), client);
                    connectDone.WaitOne();

//你的程序放这里。。。如有数据要发送,就call
                    Send(client, str);

//你的程序结束时:
                    client.Shutdown(SocketShutdown.Both);
                    client.Close();

qfzqiou 2013-08-14
  • 打赏
  • 举报
回复
打错了字 我的问题是:我生成的数据从哪进去,数据在整个程序运行过程都会不停的产生. 比如说是否需要一个线程执行这个异步socket ,监听程序生成的数据,如果有就自动发送,请大神详细解答下。
Justin-Liu 2013-08-14
  • 打赏
  • 举报
回复
Send和Receive,这两个是接收发送数据用的

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧