65,210
社区成员
发帖
与我相关
我的任务
分享
//服务器端
#include "stdafx.h"
#include <Winsock2.h>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
int _tmain(int argc, _TCHAR* argv[])
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData);
if ( err != 0 )
{
return 1;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 )
{
WSACleanup( );
return 1;
}
SOCKET socksrv=socket(AF_INET,SOCK_STREAM,0);
sockaddr_in sasrv;
sasrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
sasrv.sin_family=AF_INET;
sasrv.sin_port=htons(4000);
bind(socksrv,(sockaddr*)&sasrv,sizeof(sockaddr));
listen(socksrv,5);
sockaddr_in sacon;
int salen=sizeof(sockaddr);
FILE *file=fopen("D:\\3.txt","w");//接收的数据放入文件3.txt中
if(!file)
{
printf("faile to open file!");
return 1;
}
int count=1;
while(1)
{
SOCKET sockcon=accept(socksrv,(sockaddr*)&sacon,&salen);
char sendbuf[100];
sprintf(sendbuf,"Welcome %s connect me!",inet_ntoa(sacon.sin_addr));
send(sockcon,sendbuf,strlen(sendbuf)+1,0);
char recvbuf[100];
memset(recvbuf,0,100);
recv(sockcon,recvbuf,100,0);
printf("%s",recvbuf);
fputs(recvbuf,file);
//如果在这之后直接break 的话可以得到一行数据,但是我想得到客户端发送的所有数据怎么处理
if(strlen(recvbuf)==0)
{
closesocket(sockcon);
break;
}
closesocket(sockcon);
}
fclose(file);
WSACleanup();
return 0;
}
//客户端
#include "stdafx.h"
#include <Winsock2.h>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
int _tmain(int argc, _TCHAR* argv[])
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
return 1;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 )
{
WSACleanup( );
return 1;
}
SOCKET sockcli=socket(AF_INET,SOCK_STREAM,0);
sockaddr_in sacli;
sacli.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
sacli.sin_family=AF_INET;
sacli.sin_port=htons(4000);
connect(sockcli,(sockaddr*)&sacli,sizeof(sockaddr));
char recvbuf[100];
recv(sockcli,recvbuf,100,0);
printf("%s\n",recvbuf);
FILE* file=fopen("D:\\2.txt","r");
if(!file)
{
printf("error!");
return 1;
}
char buf[100];
while(fgets(buf,100,file))//将2.txt文件中的数据发送
{
send(sockcli,buf,strlen(buf)+1,0);
printf("%s",buf);
}
send(sockcli,"end!",strlen("end!")+1,0);
fclose(file);
closesocket(sockcli);
WSACleanup();
return 0;
}
// 先说明一下,这个代码写的很垃圾。MP3可以传输。具体情况看注释。
// 啰嗦一下,现在很少写代码了。。把原本就不清楚不清楚C基础,和SOCKET忘记干净了。时间真是摧毁记忆。
// 客户端
#include "stdafx.h"
#include <Winsock2.h>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
int main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
return 1;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 )
{
WSACleanup( );
return 1;
}
SOCKET sockcli=socket(AF_INET,SOCK_STREAM,0);
sockaddr_in sacli;
sacli.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
sacli.sin_family=AF_INET;
sacli.sin_port=htons(4000);
connect(sockcli,(sockaddr*)&sacli,sizeof(sockaddr));
char recvbuf[100];
recv(sockcli,recvbuf,100,0);
printf("%s\n",recvbuf);
FILE* file=fopen("D:\\2.mp3","rb"); // 读写二进制文件 记得 加 b
if(!file)
{
printf("error!");
return 1;
}
char data[100]={0};
int len=0;
int i=0;
while ((len=fread(data,1,100,file))>0 )
{
send(sockcli,data,len,0);
i++;
printf("i=%d len=%d\n",i,len);
}
fclose(file);
closesocket(sockcli);
WSACleanup();
return 0;
}
//服务器
// fuwu.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <Winsock2.h>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
int main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData);
if ( err != 0 )
{
return 1;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 )
{
WSACleanup( );
return 1;
}
SOCKET socksrv=socket(AF_INET,SOCK_STREAM,0);
sockaddr_in sasrv;
sasrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
sasrv.sin_family=AF_INET;
sasrv.sin_port=htons(4000);
bind(socksrv,(sockaddr*)&sasrv,sizeof(sockaddr));
listen(socksrv,5);
sockaddr_in sacon;
int salen=sizeof(sockaddr);
FILE *file=fopen("D:\\3.mp3","wb");//接收的数据放入文件3.txt中
if(!file)
{
printf("faile to open file!");
return 1;
}
int count=1;
SOCKET sockcon=accept(socksrv,(sockaddr*)&sacon,&salen);
if ( INVALID_SOCKET==sockcon)
{
printf("accept error");
return 0;
}else
{
char msg[100]={0};
sprintf(msg,"Welcome %s connect me!",inet_ntoa(sacon.sin_addr));
send(sockcon,msg,strlen(msg)+1,0);
}
char data[100];
int retlen=0;
int i=0;
while(1)
{
memset(data,0,100);
retlen=recv(sockcon,data,100,0);
if (retlen<=0)
{
break;
}
fwrite(data,1,retlen,file);
i++;
printf("retlen=%d i=%d\n",retlen,i);
}
closesocket(sockcon);
fclose(file);
WSACleanup();
return 0;
}
//功能我电脑上通过测试.VC6.0. 代码自己看了都无言了。
// 写的丑陋不合理的地方,希望朋友们指出来。不要让我误导楼主了。