編輯:原來是我的嵌入式以太網適配器的問題。現在運作良好。感謝大家。TCP Unix send()很慢C
當我通過TCP套接字發送文件時,傳輸完成需要很長時間(約1.5M字節約4秒)。相同的文件幾乎立即通過tftp傳播。我知道tftp使用UDP,這應該會更快,但我仍然認爲我的傳輸太慢了。我通過交叉電纜連接100Mbps半雙工。發送者是UNIX,接收者是Windows TcpClient上的.Net。
那麼,大家怎麼想?我需要更好的C代碼嗎?網絡可能有問題嗎?
這裏是我的C代碼:
int main(void)
{
//some initializing stuff
int AcceptSocket, ClientRecvSocket;
alen = sizeof(fsin);
int AcceptSocket = passiveTCP("20075", 10);
//Wait for client connections, and spawn a new thread to communicate with each one
pszRecvBuf = malloc((size_t) BUFSIZE);
while (1)
{
ClientRecvSocket = accept(AcceptSocket, &fsin, &alen);
printf("\nDebug: Accepted Connection\n");
if (ClientRecvSocket < 0)
{
sprintf(szStr, "Error accepting client connection : %d",
ClientRecvSocket);
perror(szStr);
}
else
{
printf("\nDebug: Starting Thread\n");
ThreadStatus = pthread_create(&ClientThread, NULL, ClientRecv,
(void *) &ClientRecvSocket);
pthread_join(ClientThread, NULL);
}
}
}
void *ClientRecv(void *ClientSocket)
{
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
int Socket = *(int *) ClientSocket;
unsigned char *file_buffer;
file_buffer = malloc(1572864 * sizeof(unsigned char));
//set file data to something
SendLen = send(Socket, file_buffer, 1572864 * sizeof(unsigned char), 0);
shutdown(Socket, SHUT_RDWR);
free(file_buffer);
}
int passiveTCP(char *service, int qlen)
{
return passivesock(service, "tcp", qlen);
}
'passiveTCP','AcceptSocket'等都是非標準的。我們甚至無法開始解決這個問題。 – 2011-04-12 21:45:11
AcceptSocket是一個int。我沒有意識到被動TCP不是標準的。 – dunecat 2011-04-12 21:56:11
在查看你的代碼之前,你應該使用'netcat',甚至'ftp'來確保你的網絡連接沒有問題。半雙工連接可能很難* – thkala 2011-04-12 22:03:46