簡單C Tcp檔案傳輸

2021-08-23 15:34:46 字數 4258 閱讀 4056

using system;

using system.net;

using system.net.sockets;

using system.io;

namespace win

/// /// 連線使用 tcp 協議的服務端

///

/// 服務端的ip位址

/// 服務端的埠號

///

public static socket connectserver(string ip, int port)

}catch (exception e)

return s;

}/// /// 用主機名稱連線使用tcp協議的服務端

///

/// 在hosts 檔案中存在的主機名稱

/// 服務端的埠號

///

public static socket connectservbyhostname(string hostname, int port)

else

continue;}}

catch (exception e)

return s;

}/// /// 向遠端主機傳送資料

///

/// 要傳送資料且已經連線到遠端主機的 socket

/// 待傳送的資料

/// 傳送資料的超時時間,以秒為單位,可以精確到微秒

/// 0:傳送資料成功;-1:超時;-2:傳送資料出現錯誤;-3:傳送資料時出現異常

/// /// 當 outtime 指定為-1時,將一直等待直到有資料需要傳送

///

public static int senddata(socket socket, byte buffer, int outtime)

if (buffer == null || buffer.length == 0)

int flag = 0;

tryelse

else}}

else}}

catch (socketexception e)

return flag;

}/// /// 向遠端主機傳送資料

///

/// 要傳送資料且已經連線到遠端主機的 socket

/// 待傳送的字串

/// 傳送資料的超時時間,以秒為單位,可以精確到微秒

/// 0:傳送資料成功;-1:超時;-2:傳送資料出現錯誤;-3:傳送資料時出現異常

/// /// 當 outtime 指定為-1時,將一直等待直到有資料需要傳送

///

public static int senddata(socket socket, string buffer, int outtime)

return (senddata(socket, system.text.encoding.default.getbytes(buffer), outtime));

}/// /// 接收遠端主機傳送的資料

///

/// 要接收資料且已經連線到遠端主機的 socket

/// 接收資料的緩衝區

/// 接收資料的超時時間,以秒為單位,可以精確到微秒

/// 0:接收資料成功;-1:超時;-2:接收資料出現錯誤;-3:接收資料時出現異常

/// /// 1、當 outtime 指定為-1時,將一直等待直到有資料需要接收;

/// 2、需要接收的資料的長度,由 buffer 的長度決定。

///

public static int recvdata(socket socket, byte buffer, int outtime)

if (buffer == null || buffer.length == 0)

buffer.initialize();

int left = buffer.length;

int currcv = 0;

int flag = 0;

tryelse

else}}

else}}

catch (socketexception e)

return flag;

}/// /// 接收遠端主機傳送的資料

///

/// 要接收資料且已經連線到遠端主機的 socket

/// 儲存接收到的資料的字串

/// 待接收的資料的長度

/// 接收資料的超時時間,以秒為單位,可以精確到微秒

/// 0:接收資料成功;-1:超時;-2:接收資料出現錯誤;-3:接收資料時出現異常

/// /// 當 outtime 指定為-1時,將一直等待直到有資料需要接收;

///

public static int recvdata(socket socket, string buffer, int bufferlen, int outtime)

byte tmp = new byte[bufferlen];

int flag = 0;

if ((flag = recvdata(socket, tmp, outtime)) == 0)

return flag;

}/// /// 向遠端主機傳送檔案

///

/// 要傳送資料且已經連線到遠端主機的 socket

/// 待傳送的檔名稱

/// 檔案傳送時的緩衝區大小

/// 傳送緩衝區中的資料的超時時間

/// 0:傳送檔案成功;-1:超時;-2:傳送檔案出現錯誤;-3:傳送檔案出現異常;-4:讀取待傳送檔案發生錯誤

/// /// 當 outtime 指定為-1時,將一直等待直到有資料需要傳送

///

public static int sendfile(socket socket, string filename, int maxbufferlength, int outtime)

int flag = 0;

tryelse

leftlen -= readlen;}}

fs.close();

}catch (ioexception e)

return flag;

}/// /// 向遠端主機傳送檔案

///

/// 要傳送資料且已經連線到遠端主機的 socket

/// 待傳送的檔名稱

/// 0:傳送檔案成功;-1:超時;-2:傳送檔案出現錯誤;-3:傳送檔案出現異常;-4:讀取待傳送檔案發生錯誤

public static int sendfile(socket socket, string filename)

/// /// 接收遠端主機傳送的檔案

///

/// 待接收資料且已經連線到遠端主機的 socket

/// 儲存接收到的資料的檔名

/// 待接收的檔案的長度

/// 接收檔案時最大的緩衝區大小

/// 接受緩衝區資料的超時時間

/// 0:接收檔案成功;-1:超時;-2:接收檔案出現錯誤;-3:接收檔案出現異常;-4:寫入接收檔案發生錯誤

/// /// 當 outtime 指定為-1時,將一直等待直到有資料需要接收

///

public static int recvfile(socket socket, string filename, long filelength, int maxbufferlength, int outtime)

int flag = 0;

try}

else

fs.write(buffer, 0, rcvlen);

leftlen -= rcvlen;

rcvlen = (maxbufferlength < leftlen) ? maxbufferlength : ((int)leftlen);}}

fs.close();

}catch (ioexception e)

return flag;

}/// /// 接收遠端主機傳送的檔案

///

/// 待接收資料且已經連線到遠端主機的 socket

/// 儲存接收到的資料的檔名

/// 待接收的檔案的長度

/// 0:接收檔案成功;-1:超時;-2:接收檔案出現錯誤;-3:接收檔案出現異常;-4:寫入接收檔案發生錯誤

public static int recvfile(socket socket, string filename, long filelength)

}}

簡單tcp通訊,檔案傳輸

簡單檔案傳輸

原理 檔案傳輸的原理其實很簡單,服務端先在某個埠監聽,等待客戶端的連線,連線成功後,服務端開啟指定的檔案,然後讀取檔案,再通過建立的套接字傳送給客戶端。如果要實現乙個服務端能與多個客戶端連線,則需要用到多執行緒,下面給出一對一的實現 有興趣的朋友可以用多執行緒實現一對多。程式 include inc...

TFTP 簡單檔案傳輸協議

1.tftp trivial file transfer protocol 簡單檔案傳輸協議 與ftp不同的是,它使用的是udp的69埠,因此它可以穿越許多防火牆。不過它也有缺點,比如傳送不可靠 沒有密碼驗證等。非常適合傳送小型檔案的 2.配置tftp ecgl linux 自帶 tftp serv...

QT檔案傳輸(簡單版)

qt檔案傳輸 簡單版 這是用qt寫的一篇簡單的檔案傳輸,只是考慮了黏包問題,並沒有考慮進度條和執行緒問題 pro中加network 標頭檔案 qtcpsocket通訊套接字 qtcpserver監聽套接字 qfile 檔案操作 qtimer定時器 防止黏包 函式 fileserver 建構函式 fi...