编辑:原来是我的嵌入式以太网适配器有问题。现在运作良好。感谢大家。
当我通过tcp套接字发送文件时,传输完成需要很长时间(1.5M字节约为4秒)。同一文件几乎立即通过tftp传输。我知道tftp使用UDP,它应该更快,但是我仍然认为我的传输速度太慢。我通过交叉电缆连接了100Mbps半双工。 Windows TcpClient上的发送者是UNIX,接收者是.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);
}
最佳答案
乍一看,在功能ClientRecv
中,您正在消耗过多的资源...
unsigned char *file_buffer;
file_buffer = malloc(1572864 * sizeof(unsigned char));
您正在为此分配内存,但是它去了哪里……应该尝试释放指向该缓冲区的指针。
为了服务和帮助他人,您正在使用某种包装框架,请指定使用哪种包装框架。...我强烈怀疑您使用的是非标准软件-也许该软件有某些“问题”吗?