本篇文章给大家谈谈c语言tcp收发大文件,以及tcp传输大文件对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、C语言实现socket编程TCP通信的问题?2、Windows系统用C语言写TCP通信3、c语言跟android的tcp数据传输问题4、C 语言socket 的send数据太大,最大能发送多少?如何分批发送?5、C语言编写TCP的文件传输
C语言实现socket编程TCP通信的问题?
我做试验,发现是如果你这样写:
char sendbuf[1024] = {“123456\n”};
也就是发送数据加上了换行,服务端立即显示了。看来不加换行就被缓存了(应该是被服务端收到但缓存了)。
Windows系统用C语言写TCP通信
#include
#include
#include
#pragma comment(lib,”ws2_32.lib”)
typedef struct{
SOCKET accpt;
int lock;
}Arg;
void *transfer(void *arg)
{
Arg * info = (Arg *)arg;
SOCKET clientSock;
char recvbuf[102];
char sendBuf[] = “10”;
int ret;
memcpy(clientSock,(void*)info-accpt,sizeof(clientSock));
info-lock =1;
while (TRUE)
{
ret = send(clientSock,sendBuf,2,0);
if (ret == -1)
{
break;
}
ret = recv(clientSock,recvbuf,102,0);
printf(“%s\n”,recvbuf);
}
return (void *)0;
}
void* timer(void *arg)
{
time_t last = time(NULL);
time_t now;
int i = 20;
while(i–)
{
now = time(NULL);
if(now – last == 1)
{
printf(“1s past!\n”);
last = now;
}
Sleep(500);
}
printf(“timer exit.\n”);
return (void *)0;
}
int main(void) {
WSADATA wsaData;
SOCKET ListenSocket;
SOCKADDR_IN service,client;
int len = sizeof(client);
Arg argument;
pthread_t tid;
char sendBuf[] = “ID=2;WHAT=host”;
int iResult = WSAStartup(MAKEWORD(2,2), wsaData);
if (iResult != NO_ERROR) {
printf(“Error at WSAStartup()\n”);
return 1;
}
ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ListenSocket == INVALID_SOCKET) {
printf(“Error at socket(): %ld\n”, WSAGetLastError());
WSACleanup();
return 1;
}
service.sin_family = AF_INET;
service.sin_addr.s_addr = inet_addr(“127.0.0.1”);
service.sin_port = htons(27115);
if (bind( ListenSocket,
(SOCKADDR*) service,
sizeof(service)) == SOCKET_ERROR) {
printf(“bind() failed.\n”);
closesocket(ListenSocket);
WSACleanup();
return 1;
}
if (listen( ListenSocket, 1 ) == SOCKET_ERROR) {
printf(“Error listening on socket.\n”);
closesocket(ListenSocket);
WSACleanup();
return 1;
}
argument.lock = 1;
printf(“Waiting for client to connect…\n”);
pthread_create(tid,NULL,timer,NULL);
while(TRUE){
argument.accpt = accept( ListenSocket, (SOCKADDR*)client, len );
if (argument.accpt == INVALID_SOCKET) {
printf(“accept failed: %d\n”, WSAGetLastError());
closesocket(ListenSocket);
WSACleanup();
return 1;
} else {
printf(“accept%s:%d\n”,inet_ntoa(client.sin_addr),client.sin_port);
while (!argument.lock);
argument.lock = 0;
// sendto(argument.accpt,sendBuf,sizeof(sendBuf),0,(SOCKADDR*)client,len);
pthread_create(tid,NULL,transfer,argument);
//send(AcceptSocket,sendBuf,sizeof(sendBuf),0);
}
}
// No longer need server socket
closesocket(ListenSocket);
WSACleanup();
return 0;
}
c语言跟android的tcp数据传输问题
private String floadText(String name) { // TODO Auto-generated method stub String str=null; try { File fl=new File(“/sdcard/”+name); byte[] by1=new byte[(int)fl.length()]; FileInputStream fs1=new FileInputStream(fl); fs1.read(by1); fs1.close(); str=new String(by1,”utf-8”); str=str.replaceAll(“\\r\\n”, “\n”); } catch (Exception e) { Toast.makeText(getBaseContext(), “sorry not find this file!”, Toast.LENGTH_SHORT).show(); } return str; }
C 语言socket 的send数据太大,最大能发送多少?如何分批发送?
是这样,如果是UDP传输,一般就是1500左右。如果是TCP大小不一定,比如你要传10000,有可能一次传的量是小于10000的任意量。
为了解决这个问题,我建议你用阻塞的SOCKET ,TCP传输,用一个循环接收一个大数据包,每次接到多少字节就将内存下表移动多少,在下次循环中继续接受,直到传完一个整包。
C语言编写TCP的文件传输
粗略看了一下,你是用户的是TCP不是UDP,注意一点TCP可靠安全但是需要你自己手动处理粘包问题.你要是想学网络编程,就需要学会分析和定制协议.我建议你先去看看TFTP的网络协议.所谓的通信就是我发请求给你,你给我应答(请求成功还是失败).你刚学网络编程,直接是使用tcp不是很合适,你可以去看看TFTP的协议(向服务器请求下载或者上传文件).复杂一点的程序一搬都需要定制网络协议,tcp则还需要处理粘包问题.如果你想学,可以和我联系,我可以发你资料→_→
关于c语言tcp收发大文件和tcp传输大文件的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。