【发布时间】:2014-07-08 22:25:45
【问题描述】:
我是套接字编程的新手(尤其是异步套接字)。
我使用本教程http://www.codeproject.com/Articles/22918/How-To-Use-the-SocketAsyncEventArgs-Class 获得了AsynSocketserver(我的客户端使用同步套接字)
基本上它有效。客户端可以连接到服务器,发送一些数据并得到回显。
我有这个代码(在SocketListener 类中)来接收数据(没有回显):
private void ProcessReceive(SocketAsyncEventArgs e) {
//check if remote host closed the connection
if (e.BytesTransferred > 0) {
if (e.SocketError == SocketError.Success) {
Token token = e.UserToken as Token;
token.SetData(e);
Socket s = token.Connection;
if (s.Available == 0) {
token.ProcessData(e);
}
bool IOPending = s.ReceiveAsync(e);
if (!IOPending) {
ProcessReceive(e);
}
//echo back
/* if (s.Available == 0) {
//set return buffer
token.ProcessData(e);
if (!s.SendAsync(e)) {
this.ProcessSend(e);
}
} else if (!s.ReceiveAsync(e)) {
this.ProcessReceive(e);
}*/
} else {
this.ProcessError(e);
}
} else {
this.CloseClientSocket(e);
}
}
private void ProcessSend(SocketAsyncEventArgs e) {
if(e.SocketError == SocketError.Success){
Token token = e.UserToken as Token;
if(!token.Connection.ReceiveAsync(e)){
this.ProcessReceive(e);
}
} else {
this.ProcessError(e);
}
}
现在我希望客户端可以连接到服务器(可能会向服务器发送一些数据,但客户端不必首先向服务器发送一些数据,它只需要连接到服务器)和客户端可以从服务器接收一些数据。
问题:我不知道在哪里或如何使用 socketEventArgs.senAsync() 方法而不接收数据。
目前我在 Token-Class 中使用 send() 方法,它创建一个新的 AsyncEventArgs 对象并使用(在令牌中)存储的连接来发送数据:
public void send() {
SocketAsyncEventArgs args = new SocketAsyncEventArgs();
args.UserToken = this;
args.SetBuffer(sendBuffer, 0, sendBuffer.Length);
connection.SendAsync(args);
}
它有效,但这似乎是错误的方法。
那么,如何在不先从客户端接收数据的情况下,通过打开的连接向客户端发送数据?
【问题讨论】:
标签: c# sockets send asyncsocket