日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言socket发送excel,socket文件传输功能的实现

發布時間:2024/10/8 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言socket发送excel,socket文件传输功能的实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

服務端:

#include?

#include?

#pragma?comment?(lib,?"ws2_32.lib")??//加載?ws2_32.dll

#define?BUF_SIZE?1024

int?main(int?argc,?char?*argv[]){

//先檢查文件是否存在

char?*filename?=?"Beyond.mp3";//文件名

FILE?*fp?=?fopen(filename,?"rb");//以二進制方式打開文件

if(fp?==?NULL)

{

printf("Cannot?open?file,?press?any?key?to?exit!\n");

system("pause");

exit(0);

}

//初始化?DLL

WSADATA?wsaData;

WSAStartup(?MAKEWORD(2,?2),?&wsaData);

//創建套接字

SOCKET?servSock?=?socket(PF_INET,?SOCK_STREAM,?IPPROTO_TCP);

if(servSock?==?INVALID_SOCKET)

{

printf("Failed?socket().\n");

WSACleanup();

return?0;

}

//綁定套接字

struct?sockaddr_in?sockAddr;

memset(&sockAddr,?0,?sizeof(sockAddr));??//每個字節都用0填充

sockAddr.sin_family?=?PF_INET;??//使用IPv4地址

sockAddr.sin_addr.s_addr?=?inet_addr("127.0.0.1");??//具體的IP地址

sockAddr.sin_port?=?htons(1234);??//端口

if(bind(servSock,?(SOCKADDR*)&sockAddr,?sizeof(SOCKADDR))?==?SOCKET_ERROR)

{

printf("Failed?bind().\n");

WSACleanup();

return?0;

}

//進入監聽狀態

listen(servSock,?20);

//循環接收客戶端請求

int?nSize?=?sizeof(SOCKADDR);

char?buffer[BUF_SIZE]?=?{0};//緩沖區

SOCKADDR?clntAddr;

SOCKET?clntSock;

for(;;)

{

clntSock?=?accept(servSock,?(SOCKADDR*)&clntAddr,?&nSize);

if(clntSock?==?INVALID_SOCKET)

{

printf("Failed?accept().\n");

continue;

}

int?nCount;

while(nCount?=?fread(buffer,?1,?BUF_SIZE,?fp)?>?0)

{

send(clntSock,?buffer,?nCount,?0);//循環發送數據,直到文件結尾

}

shutdown(clntSock,?SD_SEND);//文件讀取完畢,斷開輸出流,向客戶端發送FIN包

recv(clntSock,?buffer,?BUF_SIZE,?0);//阻塞,等待客戶端接收完畢

memset(buffer,?0,?BUF_SIZE);//設置緩沖區

fclose(fp);

closesocket(clntSock);

}

//關閉套接字

closesocket(servSock);

//終止?DLL?的使用

WSACleanup();

system("pause");

return?0;

}

客戶端:

#include?

#include?

#include?

#pragma?comment(lib,?"ws2_32.lib")

#define?BUF_SIZE?1024

int?main(int?argc,?char?*agrv[])

{

//先輸入文件名,看文件是否能創建成功

char?filename[100]?=?{0};?//文件名

printf("Input?filename?to?save:?");

gets(filename);

FILE?*fp?=?fopen(filename,?"wb");//以二進制方式打開(創建)文件

if(fp?==?NULL)

{

printf("Cannot?open?file,?press?any?key?to?exit!\n");

system("pause");

exit(0);

}

//初始化DLL

WSADATA?wsaData;

WSAStartup(MAKEWORD(2,2),?&wsaData);

//創建套接字

SOCKET?sock?=?socket(PF_INET,?SOCK_STREAM,?IPPROTO_TCP);

if(sock?==?INVALID_SOCKET)

{

printf("Failed?socket().\n");

WSACleanup();

return?0;

}

//向服務器發起請求

struct?sockaddr_in?sockAddr;

memset(&sockAddr,?0,?sizeof(sockAddr));?//每個字節都用0填充

sockAddr.sin_family?=?PF_INET;

sockAddr.sin_addr.s_addr?=?inet_addr("127.0.0.1");

sockAddr.sin_port?=?htons(1234);

if(connect(sock,?(SOCKADDR*)&sockAddr,?sizeof(SOCKADDR))?==?-1)

{

printf("Failed?connect().\n");

WSACleanup();

return?0;

}

//循環接受數據,知道文件傳輸完畢

char?buffer[BUF_SIZE]?=?{0};?//文件緩沖區

int?nCount;

while((nCount?=?recv(sock,?buffer,?BUF_SIZE,?0))?>?0)

{

fwrite(buffer,?nCount,?1,?fp);

}

puts("File?transfer?success!\n");

memset(buffer,?0,?BUF_SIZE);//重置緩沖區

fclose(fp);

closesocket(sock);

//終止使用DLL

WSACleanup();

system("pause");

return?0;

}

總結

以上是生活随笔為你收集整理的c语言socket发送excel,socket文件传输功能的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。