当前位置:首页 » 文件管理 » 文件上传socket

文件上传socket

发布时间: 2022-04-21 19:16:16

① Socket文件传输问题

这就由你自己制定标准了,客户端可以每次接收后,判断buffer中的内容,如果为“ok”那就不写,并且关闭文件就好了。

② c# c/s结构Socket上传文件的代码

以流的形式写
int
port
=
1234;
int
port
=
1234;
IPAddress
ip
=
IPAddress.Parse("127.0.0.1");
socket
=
new
Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
IPEndPoint
iep
=
new
IPEndPoint(ip,port);
//socket.Blocking
=
false;
socket.Bind(iep);
socket.Listen(10);
Console.WriteLine("start......");
try
{
for
(int
i
=
0;
i
<
10;i++
)
{
}
}
catch
{
Console.WriteLine("异常!");
socket.Close();
}
接收端
private
void
Receive(Socket
socket)
{
NetworkStream
ns
=
new
NetworkStream(socket);
FileStream
fs
=
new
FileStream("c:\\file.txt",
FileMode.OpenOrCreate);
bool
isRead
=
true;
while
(isRead)
{
int
count
=
ns.Read(this._receiveBuf,
0,
this._receiveBuf.Length);
int
datanum
=
0;
datanum
=
BitConverter.ToInt32(this._receiveBuf,
0);
//从buffer中的前4个字节读出count
if
(datanum
>
0)
//确定每次要接受多少字节数
{
fs.Write(this._receiveBuf,
4,
datanum);
}
else
//如果接受字节数为0
就推出
{
isRead
=
false;
}
}
this.txtFile.Text
=
"文件传输成功";
fs.Close();
}
---------------------
发送端
private
void
btSend_Click(object
sender,
System.EventArgs
e)
{
if
(this._isConnect)
{
_ns
=
_tc.GetStream();
string
path
=
this.txtPath.Text.Trim();
FileStream
fs
=
new
FileStream(path,
FileMode.Open);
int
sendCount
=
0;
byte[]
countbuffer
=
null;
byte[]
clientbuffer
=
new
byte[1004];
while
(sendCount
<
fs.Length
&&
_ns.CanWrite)
{
int
count
=
fs.Read(_sendBuf,
0,
_sendBuf.Length);
//读出要发送的数据
countbuffer
=
BitConverter.GetBytes(count);
countbuffer.CopyTo(clientbuffer,0);
_sendBuf.CopyTo(clientbuffer,
4);
this._ns.Write(clientbuffer,
0,
4
+
count);
//写入网络流
sendCount
+=
count;
}
countbuffer
=
BitConverter.GetBytes(0);
//发送完文件后
发送count
=
0
this._ns.Write(countbuffer,
0,
countbuffer.Length);
//使接收端停止
_ns.Close();
fs.Close();
}
}
http://hi..com/lqj1112/blog/item/9a0fd21638c6461e962b4336.html
http://topic.csdn.net/u/20080514/23/23e325fc-7040-4c0b-bb6c-d1223704397c.html

java使用socket文件上传

for(int size=0;size!=-1;size=fis.read(buf)){
output.write(buf,0,size);
output.flush();
}
for(int size=0;size!=-1;size=fis.read(buf))
在buf中读取字节;当buf没有内容了,返回的-1;在这个之前,一直在循环;
output.write(buf,0,size);
output.flush();
把buf中道0开始到size个字节的内容写入输出流缓冲中
并用 flush()确认发送到输出流中了;
我的意见是output.write(buf,0,size);
改为output.write(buf);
你接受数据部分代码怎么写的,是不是size等于一个大于1024的整数了而出错

④ 怎样用socket实现点对点的文件传输

在两台计算机传输文件之前,必需得先有一台计算机建立套接字连接并绑定一个固定得端口,并在这个端口侦听另外一台计算机的连接请求。

socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);
socket.Blocking = true ;
IPEndPoint computernode1 = new IPEndPoint(serverIpadress, 8080);
socket.Bind(computernode1);
socket.Listen(-1);

当有其他的计算机发出连接请求的时候,被请求的计算机将对每一个连接请求分配一个线程,用于处理文件传输和其他服务。

while ( true )
{
clientsock = socket.Accept();
if ( clientsock.Connected )
{
Thread tc = new Thread(new ThreadStart(listenclient));
tc.Start();
}
}

下面的代码展示了listenclient方法是如何处理另外一台计算机发送过来的请求。首先并对发送过来的请求字符串作出判断,看看是何种请求,然后决定相应的处理方法。
void listenclient()
{
Socket sock = clientsock ;
try
{
while ( sock != null )
{
byte[] recs = new byte[32767];
int rcount = sock.Receive(recs,recs.Length,0) ;
string message = System.Text.Encoding.ASCII.GetString(recs) ;
//对message作出处理,解析处请求字符和参数存储在cmdList 中
execmd=cmdList[0];
sender = null ;
sender = new Byte[32767];

string parm1 = "";
//目录列举
if ( execmd == "LISTING" )
{
ListFiles(message);
continue ;
}
//文件传输
if ( execmd == "GETOK" )
{
cmd = "BEGINSEND " + filepath + " " + filesize ;
sender = new Byte[1024];
sender = Encoding.ASCII.GetBytes(cmd);
sock.Send(sender, sender.Length , 0 );
//转到文件下载处理
DownloadingFile(sock);
continue ;
}
}
}
catch(Exception Se)
{
string s = Se.Message;
Console.WriteLine(s);
}
}

至此,基本的工作已经完成了,下面我们看看如何处理文件传输的。
while(rdby < total && nfs.CanWrite)
{
//从要传输的文件读取指定长度的数据
len =fin.Read(buffed,0,buffed.Length) ;
//将读取的数据发送到对应的计算机
nfs.Write(buffed, 0,len);
//增加已经发送的长度
rdby=rdby+len ;
}
从上面的代码可以看出是完成文件转换成FileStream 流,然后通过NetworkStream绑定对应的套节子,最后调用他的write方法发送到对应的计算机。

我们再看看接受端是如何接受传输过来的流,并且转换成文件的:

NetworkStream nfs = new NetworkStream(sock) ;
try
{
//一直循环直到指定的文件长度
while(rby < size)
{
byte[] buffer = new byte[1024] ;
//读取发送过来的文件流
int i = nfs.Read(buffer,0,buffer.Length) ;
fout.Write(buffer,0,(int)i) ;
rby=rby+i ;
}
fout.Close() ;
从上面可以看出接受与发送恰好是互为相反的过程,非常简单。

至此,单方向的文件传输就完成了,只需要在每个对等的节点上同时实现上面的发送和接受的处理代码就可以做到互相传输文件了。

⑤ Socket网络通信怎么往服务器上传数据

//上传文件

Socket socket = new Socket("192.168.0.240", 7878);
OutputStream outputStream = socket.getOutputStream();
String head = "Content-Length=" + audioFile.length()
+ ";filename=" + audioFile.getName()
+ ";sourceid=\r\n";
outputStream.write(head.getBytes());
PushbackInputStream inStream = new PushbackInputStream(
socket.getInputStream());
String response = StreaTool.readLine(inStream);
String[] items = response.split(";");
String position = items[1]
.substring(items[1].indexOf("=") + 1);

RandomAccessFile fileOutStream = new RandomAccessFile(
audioFile, "r");
fileOutStream.seek(Integer.valueOf(position));
byte[] buffer = new byte[1024];
int len = -1;
while ((len = fileOutStream.read(buffer)) != -1)
{
outputStream.write(buffer, 0, len);

}
fileOutStream.close();
outputStream.close();
socket.close();
audioFile.delete();
} catch (UnknownHostException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}

⑥ socket 传送文件

此程序所占篇幅太大,涉及服务器和客户端两个程序。费时间了。
主要思想就那么一点:基本socket编程,再加上文件操作不就行了。服务器端接到客户端发送的内容后,将缓冲区内的东西存到本地文件1.txt然后再将应答存储在2.txt文件中,同时将2.txt的内容发送回客户端。客户端接到后,将收到的东西存到客户端本地的2.txt中后,再向服务器发送应答。这东西的本质不是发送文件,而是接受信息并存储到本地的txt中,希望你理解

⑦ Socket通信能不能发送文件

当然可以咯,socket是套接字,运行在网络层(IP)以及传输层上,显然是可以传输文件的咯,应用层使用的各种TCP,ftp,UDP服务均可封装在套接字之上,所以显然是可以的咯。

⑧ 请教socket文件传输问题

关闭?Receive最好开辟一个线程,来不断循环不断侦听每次发来的数据,你的Send传递的数据如果为二进制,最好分成两次传递,第一次传递二进制数据的长度,第二次传递数据,Receive接收的第一次数据得到二进制数据长度后,定义字节数组的长度,第二次向字节数组传递数据!你不是关闭,你是不是将传递与接收写在一起了?

⑨ 要通过(socket)来传输文件这是什么意思

SOCKET用于在两个基于TCP/IP协议的应用程序之间相互通信。中文有的称为套接字,你可以理解为一个插座和插头,两者匹配才能进行数据通信。 SOCKET最早出现在UNIX系统中,是UNIX系统主要的信息传递方式。在WINDOWS系统中,SOCKET称为WINSOCK。
SOCKET有两个基本概念:客户方和服务方。当两个应用之间需要采用SOCKET通信时,首先需要在两个应用之间(可能位于同一台机器,也可能位于不同的机器)建立SOCKET连接,发起呼叫连接请求的一方为客户方,接受呼叫连接请求的一方成为服务方。客户方和服务方是相对的,同一个应用可以是客户方,也可以是服务方。
在客户方呼叫连接请求之前,它必须知道服务方在哪里。所以需要知道服务方所在机器的IP地址或机器名称,如果客户方和服务方事前有一个约定就好了,这个约定就是PORT(端口号)。也就是说,客户方可以通过服务方所在机器的IP地址或机器名称和端口号唯一的确定方式来呼叫服务方。在客户方呼叫之前,服务方必须处于侦听状态,侦听是否有客户要求建立连接。一旦接到连接请求,服务方可以根据情况建立或拒绝连接。连接方式有两种,同步方式(Blocking)和(noBlocking).
客户方发送的消息可以是文本,也可以是二进制信息流。当客户方的消息到达服务方端口时,会自动触发一个事件(event),服务方只要接管该事件,就可以接受来自客户方的消息了。

⑩ 为什么上传文件到空间中时总是出现打开数据 socket

问题出现原因:FTP客户端程序设置问题,客户上网线路问题,ftp服务器端问题。 处理方法:建议客户使用CUTPFTP软件来上传客户的网页,在“FTP主机地址处”最好填写IP地址,如果客户上传时提示socket错误的话,请您检查一下您使用软件的编辑菜单下的连接中防火墙里是否有一个使用了pasv模式,如果选中的话,您把此选项取消即可连接主机。 2、FTP时已经通过身份验证,但总列不出目录或总是显示建立数据 socket 失败 问题出现原因:您使用的上传软件的FTP客户端程序不应该选用PASV mode和firewall setting 3、为什么无法上传,提示连接时找不到主机? 首先请您检查一下您的域名是否做过域名解析,检测方法:您可以在DOS提示符下输入ping域名如果可以ping通的话,则您可以在FTP软件中“FTP主机地址处”填写您的域名,如果ping不通的话,则您需要在“FTP主机地址处”填写您主机的IP地址。 注意:我们建议您使用IP地址上传页面,同时,某些地区的拨号上网的169对ftp有限制。所以请您最好更换上网方式后在进行测试。 4、为什么无法上传,提示密码不对? 请查看您的登陆名密码填写是否正确,因为如果密码是复制的话,可能会复制出空格。另外,您要看一下您在ftp登陆时选择的登陆类型是否是普通。 如果您把密码忘记的话,您可以修改:用户管理中心我的主机选择对应域名并点击主机详情基本FTP账号更改密码 如果此处的密码也无法登陆,请您发传真到中国易动网技术部,请注明您的ID,您的主机域名,您的要求,您的联系方式、并加盖公章(个人附身份证复印件),我们收到后会尽快为您办理。

热点内容
mobisage文件夹 发布:2024-11-07 09:29:16 浏览:876
车载安卓机怎么清理垃圾 发布:2024-11-07 09:12:51 浏览:450
外网访问vmware 发布:2024-11-07 08:51:03 浏览:952
安卓和苹果怎么快传 发布:2024-11-07 08:50:44 浏览:636
安卓和鸿蒙哪个系统更省空间 发布:2024-11-07 08:39:30 浏览:482
解压精子 发布:2024-11-07 08:37:56 浏览:256
android搭建服务器端 发布:2024-11-07 08:33:31 浏览:784
什么软件缓存视频快 发布:2024-11-07 08:29:19 浏览:849
参数访问键 发布:2024-11-07 08:08:43 浏览:138
ftp服务器搭建教程win10 发布:2024-11-07 08:06:20 浏览:260