如何拷贝文件(C#) 将文件转化成字节流,然后用Socket发送到服务器上去。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 有没有好的解决办法。将本地文件上传到FTP上不要告诉我用FTP软件。我是要写程序来实现这个功能。 将文件转化成字节流,然后用Socket发送到服务器上去同意 参考System.Net.Stocket System.Net 好像还有一个Client的静态方法可以参考 本人没有实现过 关注………… 例子:private void button1_Click(object sender, System.EventArgs e) { //取得预保存的文件名 string fileName=textBox3.Text.Trim(); //远程主机 string hostName=textBox1.Text.Trim(); //端口 int port=Int32.Parse(textBox2.Text.Trim()); //得到主机信息 IPHostEntry ipInfo=Dns.GetHostByName(hostName); //取得IPAddress[] IPAddress[] ipAddr=ipInfo.AddressList; //得到ip IPAddress ip=ipAddr[0]; //组合出远程终结点 IPEndPoint hostEP=new IPEndPoint(ip,port); //创建Socket 实例 Socket socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); try { //尝试连接 socket.Connect(hostEP); } catch(Exception se) { MessageBox.Show("连接错误"+se.Message,"提示信息 ,MessageBoxButtons.RetryCancel,MessageBoxIcon.Information); } //发送给远程主机的请求内容串 string sendStr="GET / HTTP/1.1\r\nHost: " + hostName + "\r\nConnection: Close\r\n\r\n"; //创建bytes字节数组以转换发送串 byte[] bytesSendStr=new byte[1024]; //将发送内容字符串转换成字节byte数组 bytesSendStr=Encoding.ASCII.GetBytes(sendStr); try { //向主机发送请求 socket.Send(bytesSendStr,bytesSendStr.Length,0); } catch(Exception ce) { MessageBox.Show("发送错误:"+ce.Message,"提示信息 ,MessageBoxButtons.RetryCancel,MessageBoxIcon.Information); } //声明接收返回内容的字符串 string recvStr=""; //声明字节数组,一次接收数据的长度为1024字节 byte[] recvBytes=new byte[1024]; //返回实际接收内容的字节数 int bytes=0; //循环读取,直到接收完所有数据 while(true) { bytes=socket.Receive(recvBytes,recvBytes.Length,0); //读取完成后退出循环 if(bytes<=0) break; //将读取的字节数转换为字符串 recvStr+=Encoding.ASCII.GetString(recvBytes,0,bytes); } //将所读取的字符串转换为字节数组 byte[] content=Encoding.ASCII.GetBytes(recvStr); try { //创建文件流对象实例 FileStream fs=new FileStream(fileName,FileMode.OpenOrCreate,FileAccess.ReadWrite); //写入文件 fs.Write(content,0,content.Length); } catch(Exception fe) { MessageBox.Show("文件创建/写入错误:"+fe.Message,"提示信息",MessageBoxButtons.RetryCancel,MessageBoxIcon.Information); } //禁用Socket socket.Shutdown(SocketShutdown.Both); //关闭Socket socket.Close(); } } using System;using System.IO;using System.Net;using System.Threading;using System.net.Sockets;TcpListener tcpListener = new TcpListener(21) //监听21端口tcpListener.Start();Socket socketForClient = tcpListener.Accept(); //套接字连接if (socketForClient.Connected){ NetworkStream networkStream = new NetWorkStream(SocketFoeClient); System.IO.StreamWriter streamWriter = new System.IO.streamWriter(networkStream); 向这个流写入时 流将跨越网络发送给客户 实际程序我写不出来 (没有做过) 肯定要在一个线程中运行请求代码 而且还应该在try 代码快中封装 处理网络问题的逻辑这种方法还要在客户端做一下TcpClient 的类 创建streamreader云云} 怎么设计一个类,能够监视这个类的任何属性是否被修改过(不需要修改所有属性的set函数的情况下) C#验证用户名和密码的数据库操作的小问题 控件的继承 数据库某整数字段加一后再取得该值的存储过程怎么写?写了一个不执行啊,55 FastSpring学习求助 请大家帮我看看是什么原因不能显视 DataGridView中有一列是ComBox类型的列,请问我怎么在程序中向这一列中赋值呢? C#窗体程序自带关闭是否释放资源 如何改变TabControl控件的背景色(上面的分页条)(在线等,有效立即给分) 除了vs.net外。还有什么可以用来编辑C#的软件呢? 怎样实现动态菜单 关于文件操作
不要告诉我用FTP软件。我是要写程序来实现这
个功能。
同意 参考System.Net.Stocket System.Net 好像还有一个Client的静态方法可以参考 本人没有实现过 关注…………
private void button1_Click(object sender, System.EventArgs e) {
//取得预保存的文件名
string fileName=textBox3.Text.Trim();
//远程主机
string hostName=textBox1.Text.Trim();
//端口
int port=Int32.Parse(textBox2.Text.Trim());
//得到主机信息
IPHostEntry ipInfo=Dns.GetHostByName(hostName);
//取得IPAddress[]
IPAddress[] ipAddr=ipInfo.AddressList;
//得到ip
IPAddress ip=ipAddr[0];
//组合出远程终结点
IPEndPoint hostEP=new IPEndPoint(ip,port);
//创建Socket 实例
Socket socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
try
{
//尝试连接
socket.Connect(hostEP);
}
catch(Exception se)
{
MessageBox.Show("连接错误"+se.Message,"提示信息
,MessageBoxButtons.RetryCancel,MessageBoxIcon.Information);
}
//发送给远程主机的请求内容串
string sendStr="GET / HTTP/1.1\r\nHost: " + hostName +
"\r\nConnection: Close\r\n\r\n";
//创建bytes字节数组以转换发送串
byte[] bytesSendStr=new byte[1024];
//将发送内容字符串转换成字节byte数组
bytesSendStr=Encoding.ASCII.GetBytes(sendStr);
try
{
//向主机发送请求
socket.Send(bytesSendStr,bytesSendStr.Length,0);
}
catch(Exception ce)
{
MessageBox.Show("发送错误:"+ce.Message,"提示信息
,MessageBoxButtons.RetryCancel,MessageBoxIcon.Information);
}
//声明接收返回内容的字符串
string recvStr="";
//声明字节数组,一次接收数据的长度为1024字节
byte[] recvBytes=new byte[1024];
//返回实际接收内容的字节数
int bytes=0;
//循环读取,直到接收完所有数据
while(true)
{
bytes=socket.Receive(recvBytes,recvBytes.Length,0);
//读取完成后退出循环
if(bytes<=0)
break;
//将读取的字节数转换为字符串
recvStr+=Encoding.ASCII.GetString(recvBytes,0,bytes);
}
//将所读取的字符串转换为字节数组
byte[] content=Encoding.ASCII.GetBytes(recvStr);
try
{
//创建文件流对象实例
FileStream fs=new FileStream(fileName,FileMode.OpenOrCreate,FileAccess.ReadWrite);
//写入文件
fs.Write(content,0,content.Length);
}
catch(Exception fe)
{
MessageBox.Show("文件创建/写入错误:"+fe.Message,"提示信息",MessageBoxButtons.RetryCancel,MessageBoxIcon.Information);
}
//禁用Socket
socket.Shutdown(SocketShutdown.Both);
//关闭Socket
socket.Close();
}
}
using System.IO;
using System.Net;
using System.Threading;
using System.net.Sockets;TcpListener tcpListener = new TcpListener(21) //监听21端口
tcpListener.Start();
Socket socketForClient = tcpListener.Accept(); //套接字连接if (socketForClient.Connected)
{
NetworkStream networkStream = new NetWorkStream(SocketFoeClient);
System.IO.StreamWriter streamWriter = new System.IO.streamWriter(networkStream); 向这个流写入时 流将跨越网络发送给客户 实际程序我写不出来 (没有做过) 肯定要在一个线程中运行请求代码 而且还应该在try 代码快中封装 处理网络问题的逻辑这种方法还要在客户端做一下TcpClient 的类 创建streamreader云云}