怎样使用TCP在服务器和客户端传输大量得图片文件?

thymelaea 2004-06-28 03:28:43
有谁做过类似得工作,在服务器和客户端建立TCP通道,然后由服务器给客户端传输图片文件,每次传输得大小大约是20M左右,这里是我写得代码,但是传到客户端之后文件里边就为空了,有谁知道为什么嘛?
private void Form1_Load(object sender, System.EventArgs e)
{
Thread tcp=new Thread(new ThreadStart(ThreadedTcpSrvr1));
tcp.IsBackground=true;
tcp.Start();
}
public Socket server;
public string stringdata;
public void ThreadedTcpSrvr1()
{
client=new TcpListener(IPAddress.Parse("192.168.10.54"),5801);
client.Start();
while(true)
{
while(!client.Pending())
{
Thread.Sleep(2000);
}
threadlistener=client;
Thread newthread=new Thread(new ThreadStart(HandleConnection));
newthread.IsBackground=true;
newthread.Start();
}
}

public void HandleConnection()
{
TcpClient tcpclient=threadlistener.AcceptTcpClient();
NetworkStream ns=tcpclient.GetStream();
FileStream fs=new FileStream("d:\\ff.yaan",FileMode.Open,FileAccess.Read);
byte[] send=new byte[2229888];
BinaryReader br=new BinaryReader(fs);
fs.Read(send,0,send.Length-1);
br.Read(send,0,send.Length-1);
ns.Write(send,0,send.Length-1);
ns.Close();
tcpclient.Close();
}
以上是服务器端得发送代码

private bool connect()
{
IPEndPoint ipep=new IPEndPoint(IPAddress.Parse("192.168.10.54"),5801);
client1=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
try
{
client1.Connect(ipep);
return true;
}
catch
{
return false;
}
}
if(connect()==true)
{
FileStream fs=new FileStream("d:\\f1.yaan",FileMode.Create);
byte[] receive=new byte[229888];
BinaryWriter bw=new BinaryWriter(fs);
client1.Receive(receive);
fs.Write(receive,0,receive.Length);
bw.Write(receive,0,receive.Length);
fs.Close();
bw.Close();
client1.Close();
以上是客户端得代码
分不够可以再加!!
...全文
338 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyingscv 2004-07-01
  • 打赏
  • 举报
回复
1
//while(true)
// {
while(!client.Pending())
{
Thread.Sleep(2000);
}
threadlistener=client;
Thread newthread=new Thread(new ThreadStart(HandleConnection));
newthread.IsBackground=true;
newthread.Start();
// }


2

//fs.Read(send,0,send.Length-1);
br.Read(send,0,send.Length);
ns.Write(send,0,send.Length);


3
client1.Receive(receive);
//fs.Write(receive,0,receive.Length);
bw.Write(receive);//,0,receive.Length);
flyingscv 2004-07-01
  • 打赏
  • 举报
回复
先接一下分
小贵子88 2004-07-01
  • 打赏
  • 举报
回复
Give me your email.
小贵子88 2004-06-30
  • 打赏
  • 举报
回复
Sorry,I'll tell you the result tommorrow.
小贵子88 2004-06-30
  • 打赏
  • 举报
回复
应该比较easy,帮你看看
517187w 2004-06-30
  • 打赏
  • 举报
回复
FileMode.OpenorCreate
banping 2004-06-30
  • 打赏
  • 举报
回复
让我想想呀,没搞过这个。
miximixi 2004-06-30
  • 打赏
  • 举报
回复
thymelaea 2004-06-29
  • 打赏
  • 举报
回复
能说得具体点嘛?我试着把它分成1000个字节逐次发送,但是接收端如何接收呢?我那样试后什么都接不到了啊
singleflower 2004-06-28
  • 打赏
  • 举报
回复
你得把文件分成固定大小的包再进行传送
will97 2004-06-28
  • 打赏
  • 举报
回复
up
thymelaea 2004-06-28
  • 打赏
  • 举报
回复
自己顶一下,怎么没有人回答啊
1、本课程是一个干货课程,主要讲解如何封装服务器底层,使用Tcp/ip长连接,IDE使用vs2019 c++开发以及使用c++11的一些标准,跨平台windows和linux,服务器性能高效,单服务器压力测试上万无压力,服务器框架是经历过上线产品的验证,框架简单明了,不熟悉底层封装的人,半个小时就能完全掌握服务器框架上手写业务逻辑。2、本课程是一个底层服务器框架教程,主要是教会学员在windows或linux下如何封装一个高效的,避免踩坑的商业级框架,服务器底层使用初始化即开辟内存的技术,使用内存池,服务器运行期间内存不会溢出,非常稳定,同时服务器使用自定义哈希hashContainer,在处理新的连接,新的数据,新的封包,以及解包,发包,粘包的过程,哈希容器性能非常高效,增、删、查、改永远不会随着连接人数的上升而降低性能,增、删、查、改的复杂度永远都是恒定的O(1)。3、服务器底层封装没有使用任何第三方网络库以及任何第三方插件,自由度非常的高,出了任何BUG,你都有办法去修改,查找问题也非常方便,在windows下使用iocp,linux下使用epoll.4、讲解c++纯客户端,主要用于服务器之间通信,也就是说你想搭建多层结构的服务器服务器服务器之间使用socket通信。还可以使用c++客户端做压力测试,开辟多线程连接服务器,教程提供了压力测试,学员可以自己做压力测试服务器性能。5、赠送ue4和unity3d通信底层框架以及多人交互demo,登录,注册,玩家离开,同步主要是教会学员服务器客户端如何交互。6、赠送c++连接mysql数据库框架demo,登录,注册,玩家离开数据持久化.7、服务器教程使用自定义通信协议,同时也支持protobuf,选择权在开发者自己手里,想用什么协议都可以,自由度高。8、服务器教程使用手动敲代码逐句讲解的方式开展教学课程。非喜勿喷,谢谢大家。9、服务器教程提供源码,大家可以在平台提供的地址下载或者联系我,服务器使用c++11部分标准,std::thread,条件变量,线程锁,智能指针等,需要学员具备一定c++知识,购买前请慎重考虑。

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧