`
javasee
  • 浏览: 961114 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Socket编程项目经验谈

阅读更多

我们的项目是用DotNet实现Socket连接,用多线程 处理多用户。我就谈一下在实现过程中遇到的问题。下面是我服务器的简化实现。

 


   private Socket clientSocket;
  public void Start()
  {
  Thread thread=new Thread(new ThreadStart(MainService));
  thread.Start();
  }
  void MainService()
  {
  listener=new TcpListener(111111);
  listener.Start();
  while(true)
  {
  Socket s= listener.AcceptSocket();//帧听客户连接
  clientSocket=s;
  Thread clientservice = new Thread(new ThreadStart(ClientService));
  clientservice.Start();
  Thread.Sleep(200);//1、等待传值给线程中的变量,防止多用户造成冲突
  }
  }
  void ClientService()
  {
  string command ;
  string receiveStr;
  string fileName,fileSize;
  Socket sock=clientSocket;
  EndPoint oldEP=sock.RemoteEndPoint;
  byte[] bb=new byte[200];
  while(true)
  {
  ii=sock.ReceiveFrom(bb,ref oldEP);//接收数据
  if(ii==0)//2、客户端连接断开,就会不停接收0个字节
  {
  break;
  }
  receiveStr=Encoding.Default.GetString(bb,0,bb.Length);
  command=ReadLineFrom(receiveStr,1).ToLower();//ReadLineFrom读取字符串中的一行数据
  Switch (command)
  {
  cace “upload“:
  fileName=ReadLineFrom(receiveStr,2);
  fileSize=ReadLineFrom(receiveStr,3);
  uploadFile(sock,fileName,Int32.Parse(fileSize));//接受数据方法,
  break;
  ....................
  }
  }
  void uploadFile(Socket sock,string fileName,int fi
leSize)
  {
  int loadSize=0;
  byte[] bb;
  int blen=102400;
  NetworkStream stream=new NetworkStream(sock);
  FileStream fs=File.OpenWrite(tempstr);
  while(loadSize  {
  if(loadSize>fileSize-
102400)
  blen=fileSize-loadSize;
  bb=new byte[blen];
  int ii=stream.Read(bb,0,bb.Length);//3、实际接受数据时每次可能没有10240个字节
  fs.Write(bb,0,ii);
  loadSize+=ii;
  }
  fs.Close();
  stream.Close();
  }

  1、等待传值给线程中的变量,防止多用户造成冲突

  2、客户端连接断开,就会不停接收0个字节

  判断客户端是否断开要用这个方法实现,Sokcet里带的Connected不起作用,只要连接上,中途不出现发送和或接收数据错误,客户断开与否都是返回true。Poll(100,SelectMode...)返回任何模式都是true。

  3、实际接受数据时每次可能没有10240个字节

  客户端我就不写了,用TcpClient连接就可以了,当然实际应用中,可能就要自己写规则了

  这些问题解决了,只要做适当的处理,视频,声音都不是问题了。

1
1
分享到:
评论
1 楼 wdeqingren 2011-01-07  
能详细说说 容错性处理么

相关推荐

    Socket编程指南及示例程序.doc

    无论是初学者还是有一定经验的开发者,掌握Socket编程的基本原理和实践技巧都是非常有益的。 #### 2. Socket简介 - **起源与发展**:Socket接口最初是在20世纪80年代由加州大学伯克利分校(UC Berkeley)在UNIX...

    src_socket编程_DEMO_

    4. **开源项目**:参与或者阅读其他人的网络编程项目,如开源的服务器软件,以提升实战经验。 总之,“src_socket编程_DEMO_”是一个很好的起点,它将理论知识与实际操作相结合,让初学者能快速上手Socket编程,...

    lua socket 支持lua SOCKET编程

    Lua Socket是Lua编程语言的一个扩展库,专门用于网络通信,它提供了一套完整的TCP、UDP以及伪套接字(如管道和文件描述符)接口,让Lua程序员能够轻松地进行Socket编程。在本文中,我们将深入探讨Lua Socket的使用、...

    精通MFC程序设计附源代码Socket编程

    本资源“精通MFC程序设计附源代码Socket编程”深入探讨了MFC的核心概念和实践技巧,同时特别关注了MFC中的Socket编程,这对于开发网络通信应用至关重要。 首先,MFC的核心是面向对象的设计,它将Windows API中的...

    87361007网络socket编程

    网络Socket编程是计算机网络通信的核心技术之一,尤其对于软件开发者来说,掌握Socket编程至关重要。它是一种基于TCP/IP协议栈的编程接口,...随着经验的积累,你将能够灵活运用Socket编程解决各种复杂的网络通信问题。

    Beej的Socket编程指南(中/英文)

    **描述解读:** 描述中提到的“以十分通俗且幽默的方式介绍了Socket网络编程的基础知识以及应用方法”,意味着这本书不仅适合初学者,也适合有一定经验但希望深入理解Socket编程的开发者。它涵盖了基础理论,如TCP/...

    Socket编程指南及示例程序

    总之,Socket编程是一个实用且基础的网络编程技能,无论你是新手还是有经验的开发者,理解并掌握Socket都能为你的编程生涯带来极大的便利。通过学习和实践,你可以轻松地构建跨平台的网络应用程序,实现数据的高效...

    Java+TCP/IP+Socket编程++原书第2版

    《Java+TCP/IP+Socket编程++原书第2版》是一部深入探讨Java网络编程的权威著作,主要聚焦于TCP/IP协议栈与Socket编程技术。在Java编程领域,掌握网络通信能力是开发分布式系统、服务器端应用以及实时数据传输等项目...

    java的socket编程课件~~~

    Java的Socket编程是网络编程的重要组成部分,主要用于实现客户端与服务器之间的通信。Socket在Java中扮演着数据传输...无论是初学者还是经验丰富的开发者,都应该对Socket编程有深入的理解,以便在实际项目中灵活运用。

    TCP/IP Socket编程第2版

    本书旨在提供关于Socket编程的全面理解,帮助读者快速掌握核心技术,并将其有效地应用于实际项目中。Socket编程是网络通信的核心,它使得应用程序可以通过Internet进行数据交换。 在TCP/IP协议栈中,Socket接口作为...

    基于java socket网络编程实现的五子棋游戏,可多人在线玩耍,聊天

    首先,我们来深入理解Java Socket编程。Socket是网络通信中的端点,它允许两台计算机(或者网络上的任何其他设备)通过TCP/IP协议进行通信。在Java中,`java.net.Socket`和`java.net.ServerSocket`类是实现Socket...

    20120102 Net Socket编程资料

    本资料集包含了作者三年来在系统开发、软件项目实施过程中积累的Socket编程经验,旨在帮助开发者深入理解和掌握这一关键技术。 Socket编程主要涉及以下几个关键知识点: 1. **基础概念**:Socket是网络通信中的一...

    基于VC++聊天的服务器,socket编程

    【标题】"基于VC++聊天的服务器,socket编程"是一个关于使用Microsoft Visual C++(VC++)开发聊天服务器的项目,它涉及到网络编程的核心技术——socket接口编程。Socket编程是互联网应用程序之间通信的一种方式,...

    VC++ socket编程核心技术与项目实战

    《vc++ socket编程核心技术与项目实战》很多学员都有这样的感觉,c++ socket编程的书看了不少,却似懂非懂,编程还是不得要领,做项目的时候经常遇到各种技术障碍。在本套课程中,作者把积累多年的大量socket编程...

    C#Socket编程经典教程

    #### 四、浅谈C# Socket编程及多线程 - **多线程基础**: 多线程编程是提高程序并发能力的重要手段。了解如何在 C# 中创建和管理线程。 - **线程安全**: 在使用 Socket 进行网络通信时,需要注意线程间的数据共享和...

    电科技大学通信学院段景山老师 socket编程ppt

    段景山老师的Socket编程课程不仅涵盖了基本概念和技术细节,还可能包含实例分析、问题解决策略以及实际项目的实践经验,这对于提升学生的网络编程能力无疑大有裨益。通过学习这个课件,学生将能够掌握Socket编程的...

    Xcode socket编程

    总的来说,Xcode Socket编程是一个涵盖广泛的技术领域,从基础的网络原理到高级的并发编程,都需要开发者有扎实的理解和实践经验。通过学习和运用这些知识,开发者可以构建功能强大、健壮的网络应用程序。

    网络编程 基于socket的开发

    本项目中,我们关注的是如何利用Socket编程来实现一个具有基本记事本功能的应用,如打开、保存文件以及复制、粘贴等操作,这些都是在MFC(Microsoft Foundation Classes)框架下完成的。 首先,让我们了解什么是...

    基于QNX的Socket测试程序

    在QNX RTOS上进行网络通信时,Socket编程是不可或缺的技术之一。本项目提供了一个基于QNX的Socket测试程序,包括Server和Client的代码示例,这对于理解如何在QNX环境下实现网络通信具有很高的参考价值。 首先,让...

Global site tag (gtag.js) - Google Analytics