Socket编程项目之后经验谈

发布时间: 2007-05-21 09:40    作者: 未知    来源: 未知    浏览:    评论

我们的项目是用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 fileSize)
{
int loadSize=0;
byte[] bb;
int blen=102400;
NetworkStream stream=new NetworkStream(sock);
FileStream fs=File.OpenWrite(tempstr);
while(loadSize<fileSize)
{
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连接就可以了,当然实际应用中,可能就要自己写规则了

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


TAG

Smile Big Smile Surprise Stick out tongue Wink Sad Tongue Tied Indifferent Crying Embarrassed Cool Angry Angel Devil [8-|] [:#] [:-*] [:^)] [<:o)] [|-)] Yes Beer Left Hug Music Star Time Snail Pizza Automobile Umbrella Computer Storm [mo] [8o|] [^o)] [+o(] [*-)] [8-)] Coffee No Drinks [Z] Right Hug Cake Broken Heart Gift Wilted Flower Movie Dog Idea Sleep Email Travel Paradise
呢称:

加粗 斜体 下划线 链接 图片 代码 邮件地址 引用 列表

最多只能输入100个字符

Tags

SQL 数据库 asp.net C# XML 控件 .NET教程 程序 事件 数据 安全 代码 Server 客户端 验证 数据库专栏 接口 文件 Oracle DataSet 函数 DataGrid 问题 .net return C#语言 JavaScript 服务 IIS 对象 语句 windows 继承 时间 web.config 设计 开发 参数 变量 解决 字符 ADO.net 环境 VB.Net语言 web 异常 工具 服务器 计算 实例 OLEDB Application VB Word WebService insert asp net 安装 记录

精华推荐

更多

精品下载

更多