private Socket clientSocket;
public void Start
{
Thread thread= Thread( ThreadStart(MainService));
thread.Start;
}
void MainService
{
listener= TcpListener(111111);
listener.Start;
while(true)
{
Socket s= listener.AcceptSocket;//帧听客户连接
clientSocket=s;
Thread clientservice = Thread( ThreadStart(ClientService));
clientservice.Start;
Thread.Sleep(200);//1、等待传值给线程中变量防止多用户造成冲突
}
}
void ClientService
{
command;
receiveStr;
fileName,fileSize;
Socket sock=clientSocket;
EndPo oldEP=sock.RemoteEndPo;
bb= [200];
while(true)
{
ii=sock.ReceiveFrom(bb,ref oldEP);//接收数据
(ii0)//2、客户端连接断开就会不停接收0个字节
{
;
}
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));//接受数据思路方法,
;
....................
}
}
void uploadFile(Socket sock, fileName, fileSize)
{
loadSize=0;
bb;
blen=102400;
NetworkStream stream= NetworkStream(sock);
FileStream fs=File.OpenWrite(tempstr);
while(loadSize {
(loadSize>fileSize-102400)
blen=fileSize-loadSize;
bb= [blen];
ii=stream.Read(bb,0,bb.Length);//3、实际接受数据时每次可能没有10240个字节
fs.Write(bb,0,ii);
loadSizeii;
}
fs.Close;
stream.Close;
}
1、等待传值给线程中变量防止多用户造成冲突
2、客户端连接断开就会不停接收0个字节
判断客户端是否断开要用这个思路方法实现Sokcet里带Connected不起作用只要连接上中途不出现发送和或接收数据客户断开和否都是返回truePoll(100,SelectMode...)返回任何模式都是true
3、实际接受数据时每次可能没有10240个字节
客户端我就不写了用TcpClient连接就可以了当然实际应用中可能就要自己写规则了
这些问题解决了只要做适当处理视频声音都不是问题了
最新评论