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文件传输功能的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c4droid语言字体颜色,关于prin
- 下一篇: c语言编写程序确定平年闰年,C语言平年闰