0
C#でのPCサーバでは、コードは、以下のTCP IPのAndroidクライアント(電話)と私はC#で記述されたPCサーバに自分の携帯電話から大きなファイルを送信したい
クライアント側です。
File sdFile=new File(mRcordFilePath);
byte[] mybytearray = new byte[(int) sdFile.length()];
FileInputStream fis = null;
try {
fis = new FileInputStream(sdFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
BufferedInputStream bis = new BufferedInputStream(fis);
DataInputStream dis = new DataInputStream(bis);
OutputStream os;
try {
os = socket.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
String name=sdFile.getName();
dos.writeUTF(name);
dos.writeLong(mybytearray.length);
int read;
while((read = dis.read(mybytearray)) != -1) {
dos.write(mybytearray, 0, read);
}
Toast.makeText(getApplicationContext(),
"Veri Gönderildi !", Toast.LENGTH_SHORT).show();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
サーバー側。
サーバの一部。
int fileNameLen = 1;
String content = String.Empty;
StateObject state = (StateObject)ar.AsyncState;
Socket handler = state.workSocket;
int bytesRead = handler.EndReceive(ar);
if (bytesRead > 0)
{
if (flag == 0)
{
fileNameLen = BitConverter.ToInt32(state.buffer, 0);
string fileName = Encoding.UTF8.GetString(state.buffer, 4, fileNameLen);
receivedPath = @"C:\Users\Hankishan\Desktop\kayıtlar\" + fileName;
flag++;
}
if (flag >= 1)
{
BinaryWriter writer = new BinaryWriter(File.Open(receivedPath, FileMode.Append));
if (flag == 1)
{
writer.Write(state.buffer, 4 + fileNameLen, bytesRead - (4 + fileNameLen));
flag++;
}
else
writer.Write(state.buffer, 0, bytesRead);
writer.Close();
handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
new AsyncCallback(ReadCallback), state);
}
}
else
{
Invoke(new MyDelegate(LabelWriter));
}
(インスタンス123.wav用)ファイルを受信しながら、私はこのコード、 を実行する場合、この列に誤りがあります。
string fileName = Encoding.UTF8.GetString(state.buffer, 4, fileNameLen);
コードを次のように変更します。
fileNameLen = state.buffer[1];
string fileName = Encoding.UTF8.GetString(state.buffer, 2, fileNameLen);
はokです。しかし、この時点で受信したファイルが破損している、PCで再生されていない、 私は何ができますか?何が問題ですか?