【发布时间】:2011-10-03 23:21:17
【问题描述】:
大家好,这个方法在客户端机器上发送文件
private void StartServer()
{
TcpListener lsn = new TcpListener(IPAddress.Any, 27015);
Socket sck;
try
{
while (true)
{
lsn.Start();
sck = lsn.AcceptSocket();
byte[] b = new byte[100];
int k = sck.Receive(b);
string recived = "";
for (int i = 0; i < k; i++)
{
recived = "" + recived + "" + Convert.ToChar(b[i]).ToString();
}
if (recived == "Version")
{
string _ipPort = sck.RemoteEndPoint.ToString();
var parts = _ipPort.Split(':');
_IPAddr = IPAddress.Parse(parts[0]);
_Port = Convert.ToInt32(parts[1]);
sck.Send(System.Text.Encoding.ASCII.GetBytes("1.1.0.0"));
}
k = sck.Receive(b);
recived = "";
for (int i = 0; i < k; i++)
{
recived = "" + recived + "" + Convert.ToChar(b[i]).ToString();
}
if (recived == "Update")
{
fName = "Cannonball.mp3";
byte[] fileName = Encoding.UTF8.GetBytes(fName);
byte[] fileData = File.ReadAllBytes("D:\\Cannonball.mp3");
byte[] fileNameLen = BitConverter.GetBytes(fileName.Length);
clientData = new byte[4 + fileName.Length + fileData.Length];
fileNameLen.CopyTo(clientData, 0);
fileName.CopyTo(clientData, 4);
fileData.CopyTo(clientData, 4 + fileName.Length);
if (sck.Connected == true)
{
sck.Send(clientData);
sck.Close();
}
}
}
}
catch (Exception e)
{
MessageBox.Show(e.Message.ToString());
}
}
如果语句没有做任何事情,它会持续到最后。我写了这段代码
Socket sck1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sck1.Connect(_IPAddr, _Port);
sck1.Send(clientData);
但是 Visual Studio 给出了无法建立连接的错误。
我尝试了 999 端口,我知道它是打开的 sck1.Connect(_IPAddr, 999); 和客户端收到的文件。
有谁知道我如何发送服务器获得的远程端点(sck.RemoteEndPoint)的文件?
【问题讨论】:
-
这是干什么用的?
recived = "" + recived + "" +...,我错过了什么还是和recived +=...一样?