要求两台电脑都连接到了同一个路由器(即位于同一局域网中),并都安装有 matlab软件。程序分成两个文件sendfile.m和getfile.m。发送端电脑使用sendfile.m发送文件,接收端电脑使用getfile.m接收文件。
举例
第一步,发送端电脑执行:
复制代码
第二步,发送端电脑执行:
复制代码
选择好要传送的文件之后,在接收端执行第三步。
第三步,接收端电脑输入,注意接收端电脑接收文件时需要知道 发送端的IP地址:
- getfile('192.168.2.100');
复制代码
源程序代码:
- function ip
- %功能:获取电脑IP地址。
- [s r]=system('ipconfig');
- r=regexp(r,'IP Address. . . . . . . . . . . . : d{1,3}.d{1,3}.d{1,3}.d{1,3}','match');
- r=r{1};
- r=regexp(r,'d{1,3}.d{1,3}.d{1,3}.d{1,3}','match');
- lip=r{1};
- disp(['本机IP为',lip]);
复制代码
sendfile.m
- function sendfile
- %局域网内发送文件,服务端程序。
- %
- % $作者:baby_wolf$
- % $时间:2012-7-20$
- %%
- [f p]=uigetfile('*.*');
- if f~=0 %已选择了文件
- %% 判断文件是否大于5M
- oldpath=cd; %当前路径
- eval(['cd ',p]); %切换路径
- FileList=dir;
- eval(['cd ' oldpath]);
- n=size(FileList,1);
- for i=1:n
- if strcmp(FileList(i).name,f)
- if FileList(i).bytes>6000000
- error('所选文件超过5M!')
- end
- end
- end
- fid=fopen([p f]);
- data=fread(fid);
- fclose(fid);
- %% 获取本机IP
- %{
- [s r]=system('ipconfig');
- r=regexp(r,'IP Address. . . . . . . . . . . . : d{1,3}.d{1,3}.d{1,3}.d{1,3}','match');
- r=r{1};
- r=regexp(r,'d{1,3}.d{1,3}.d{1,3}.d{1,3}','match');
- lip=r{1};
- disp(['本机IP为:',lip]);
- disp('等待接收方连接中...');
- %}
- %% 建立TCP连接
- tcp=tcpip('0.0.0.0',1314,'networkrole','server'); %建立tcp对象
- set(tcp,'OutputBufferSize',6000000); %设置输入缓冲区大小约5M
- fopen(tcp); %打开连接
- fwrite(tcp,abs(f),'uint16'); %写文件名
- while tcp.BytesAvailable~=2 %客户端若接收文件名成功,发送两字节确认信息
- pause(0.1);
- end
- disp('文件名传输成功!');
- fwrite(tcp,length(data),'uint32'); %写长度
- while tcp.BytesAvailable~=4 %客户端若接收文件大小成功,再次发送两字节确认信息
- pause(0.1);
- end
- disp('文件大小传送成功!');
- fwrite(tcp,data,'uint8'); %写文件
- while tcp.BytesAvailable~=6 %客户端若接收文件成功,再次发送两字节确认信息
- pause(0.1);
- end
- disp('文件传输成功!');
- fclose(tcp);
- end
复制代码
getfile.m
- function getfile(ip)
- tcp=tcpip(ip,1314);
- set(tcp,'InputBufferSize',6000000);
- fopen(tcp);
- while tcp.BytesAvailable==0
- pause(0.1);
- end
- filename=fread(tcp,tcp.BytesAvailable/2,'uint16'); %接收文件名
- filename=char(filename);
- filename=filename';
- fwrite(tcp,1314,'uint16'); %接收名字成功
- while tcp.BytesAvailable==0
- pause(0.1);
- end
- disp(['正在接收文件',filename]);
- filesize=fread(tcp,1,'uint32')
- disp(['文件共',num2str(filesize),'字节']);
- fwrite(tcp,1314,'uint16'); %接收文件大小成功
- while tcp.BytesAvailable~=filesize
- pause(0.5);
- end
- data=fread(tcp,filesize,'uint8');
- fwrite(tcp,1314,'uint16'); %接收文件大小成功
- [path name ext]=fileparts(filename);
- filename=[name, '_' , num2str(round(rand*10000)), ext];
- fid=fopen(filename,'w');
- fwrite(fid,data,'uint8');
- fclose(fid);
- fclose(tcp);
复制代码
0
|
|
|
|