//创建单独的SOCKET通道来进行文件传输
Socket socket = this.Createnewsocket(conn, _hostName, 5656);
this.Excutecmd(_CmdSocket, "stor " + files[i].Name + "\r\n");
string str2 = this.getmessagenumber(this.Recvmessage(_CmdSocket, conn)); #region 创建新的套接字连接
private Socket Createnewsocket(string conn, string ip, int port)
{
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Connect(ip, port);
return socket;
} private string Recvmessage(Socket _CmdSocket, string conn)
{
string str = "";
while (true)
{
byte[] buffer = new byte[0x200];
_CmdSocket.ReceiveTimeout = 0x1d4c0;
int count = 0;
try
{
count = _CmdSocket.Receive(buffer, buffer.Length, SocketFlags.None);
}
catch
{
this.writelog(DateTime.Now.ToString() + "|服务器未响应|超时退出!|失败", conn);
}
str = str + Encoding.Default.GetString(buffer, 0, count);
if (count < buffer.Length)
{
try
{
char[] separator = new char[] { '\n' };
string[] strArray = str.Split(separator);
if (str.Length > 2)
{
str = strArray[strArray.Length - 2];
}
else
{
str = strArray[0];
}
if (!str.Substring(3, 1).Equals(" "))
{
return this.Recvmessage(_CmdSocket, conn);
}
}
catch
{
}
return str;
}
}
}
private string getmessagenumber(string meg)
{
string str = "";
if (meg != "")
{
str = meg.Substring(0, 3);
}
return str;
}当执行string str2 = this.getmessagenumber(this.Recvmessage(_CmdSocket, conn));
掉用 Recvmessage
执行count = _CmdSocket.Receive(buffer, buffer.Length, SocketFlags.None);
到这就没反映了服务器以做了断口监听程序
解决方案 »
- Aximp Com组件转换成winform组件
- C# 读取XML每个节点的值
- C# winform 在开发好后,如何让每个窗体的cs文件都生成dll文件并打成安装包啊
- devexpress TreeList 如何设置这个ParentFieldName?(内有数据说明)
- 请问C#中怎样传递消息
- 为什么我的login.radioButton1.Checked总是false(radioButton1代表管理员身份,,,我每次都是以管理员身份登陆)
- 做过C#调用C++动态链接库的朋友请进
- 谁能帮我解决一下进程问题,谢谢
- 一个关于label的简单问题
- 该如何实现子窗体的调用过程?
- c#将子窗体镶嵌在MDI主窗体的panle里的问题
- c#程序打包
如果我没猜错你用的是阻塞式接收,也就是说一直监听到有socket数据才继续下一步。你说该步没反应应该是仍然在监听中。要注意的是,你的另一端发送的数据是否用了这个socket。我估计你socket弄混了。
正确步骤应该是:
B端保持监听 参考代码:m_TcpClient=m_TcpListener.Accept();
A端创建socket后,用connet函数连接后并对该socket保持监听
B端监听到了socket创建请求,同意请求建立socket并记录下该socket (m_TcpClient)
B端利用记录下的socket(m_TcpClient)发送数据
A端接收到了B端利用刚才建立的socket发来的数据。
你现在写的是A端,B端你检查下是不是哪里错了。
另外阻塞式接收的坏处是,你在接收到数据之前干不了别的。所以个人建议你用线程来操作这一步。
执行到count = _CmdSocket.Receive(buffer, buffer.Length, SocketFlags.None);
FTP上文件建上了。是0字节。
得怎么处理呀
执行count = _CmdSocket.Receive(buffer, buffer.Length, SocketFlags.None);这个是SOCKET同步接收数据的方法,它会阻塞当前的线程,直到有数据发过来。线程阻塞了,阻塞咋解决啊。我不会的
private string Recvmessage(Socket _CmdSocket, string conn)
{
string str = "";
_CmdSocket.Blocking = false;
while (true)
{
{
string str = "";
_CmdSocket.Blocking = false;
while (true)
{不行count = _CmdSocket.Receive(buffer, buffer.Length, SocketFlags.None);
就是0了
{
count = _CmdSocket.Receive(buffer, buffer.Length, SocketFlags.None);
if(0!=count)
{
//DoSomething
}
}