我们的项目是用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连接就可以了,当然实际应用中,可能就要自己写规则了
这些问题解决了,只要做适当的处理,视频,声音都不是问题了。
分享到:
相关推荐
无论是初学者还是有一定经验的开发者,掌握Socket编程的基本原理和实践技巧都是非常有益的。 #### 2. Socket简介 - **起源与发展**:Socket接口最初是在20世纪80年代由加州大学伯克利分校(UC Berkeley)在UNIX...
4. **开源项目**:参与或者阅读其他人的网络编程项目,如开源的服务器软件,以提升实战经验。 总之,“src_socket编程_DEMO_”是一个很好的起点,它将理论知识与实际操作相结合,让初学者能快速上手Socket编程,...
Lua Socket是Lua编程语言的一个扩展库,专门用于网络通信,它提供了一套完整的TCP、UDP以及伪套接字(如管道和文件描述符)接口,让Lua程序员能够轻松地进行Socket编程。在本文中,我们将深入探讨Lua Socket的使用、...
本资源“精通MFC程序设计附源代码Socket编程”深入探讨了MFC的核心概念和实践技巧,同时特别关注了MFC中的Socket编程,这对于开发网络通信应用至关重要。 首先,MFC的核心是面向对象的设计,它将Windows API中的...
网络Socket编程是计算机网络通信的核心技术之一,尤其对于软件开发者来说,掌握Socket编程至关重要。它是一种基于TCP/IP协议栈的编程接口,...随着经验的积累,你将能够灵活运用Socket编程解决各种复杂的网络通信问题。
**描述解读:** 描述中提到的“以十分通俗且幽默的方式介绍了Socket网络编程的基础知识以及应用方法”,意味着这本书不仅适合初学者,也适合有一定经验但希望深入理解Socket编程的开发者。它涵盖了基础理论,如TCP/...
总之,Socket编程是一个实用且基础的网络编程技能,无论你是新手还是有经验的开发者,理解并掌握Socket都能为你的编程生涯带来极大的便利。通过学习和实践,你可以轻松地构建跨平台的网络应用程序,实现数据的高效...
《Java+TCP/IP+Socket编程++原书第2版》是一部深入探讨Java网络编程的权威著作,主要聚焦于TCP/IP协议栈与Socket编程技术。在Java编程领域,掌握网络通信能力是开发分布式系统、服务器端应用以及实时数据传输等项目...
Java的Socket编程是网络编程的重要组成部分,主要用于实现客户端与服务器之间的通信。Socket在Java中扮演着数据传输...无论是初学者还是经验丰富的开发者,都应该对Socket编程有深入的理解,以便在实际项目中灵活运用。
本书旨在提供关于Socket编程的全面理解,帮助读者快速掌握核心技术,并将其有效地应用于实际项目中。Socket编程是网络通信的核心,它使得应用程序可以通过Internet进行数据交换。 在TCP/IP协议栈中,Socket接口作为...
首先,我们来深入理解Java Socket编程。Socket是网络通信中的端点,它允许两台计算机(或者网络上的任何其他设备)通过TCP/IP协议进行通信。在Java中,`java.net.Socket`和`java.net.ServerSocket`类是实现Socket...
本资料集包含了作者三年来在系统开发、软件项目实施过程中积累的Socket编程经验,旨在帮助开发者深入理解和掌握这一关键技术。 Socket编程主要涉及以下几个关键知识点: 1. **基础概念**:Socket是网络通信中的一...
【标题】"基于VC++聊天的服务器,socket编程"是一个关于使用Microsoft Visual C++(VC++)开发聊天服务器的项目,它涉及到网络编程的核心技术——socket接口编程。Socket编程是互联网应用程序之间通信的一种方式,...
《vc++ socket编程核心技术与项目实战》很多学员都有这样的感觉,c++ socket编程的书看了不少,却似懂非懂,编程还是不得要领,做项目的时候经常遇到各种技术障碍。在本套课程中,作者把积累多年的大量socket编程...
#### 四、浅谈C# Socket编程及多线程 - **多线程基础**: 多线程编程是提高程序并发能力的重要手段。了解如何在 C# 中创建和管理线程。 - **线程安全**: 在使用 Socket 进行网络通信时,需要注意线程间的数据共享和...
段景山老师的Socket编程课程不仅涵盖了基本概念和技术细节,还可能包含实例分析、问题解决策略以及实际项目的实践经验,这对于提升学生的网络编程能力无疑大有裨益。通过学习这个课件,学生将能够掌握Socket编程的...
总的来说,Xcode Socket编程是一个涵盖广泛的技术领域,从基础的网络原理到高级的并发编程,都需要开发者有扎实的理解和实践经验。通过学习和运用这些知识,开发者可以构建功能强大、健壮的网络应用程序。
本项目中,我们关注的是如何利用Socket编程来实现一个具有基本记事本功能的应用,如打开、保存文件以及复制、粘贴等操作,这些都是在MFC(Microsoft Foundation Classes)框架下完成的。 首先,让我们了解什么是...
在QNX RTOS上进行网络通信时,Socket编程是不可或缺的技术之一。本项目提供了一个基于QNX的Socket测试程序,包括Server和Client的代码示例,这对于理解如何在QNX环境下实现网络通信具有很高的参考价值。 首先,让...