日期:2014-05-18  浏览次数:20892 次

谁能给个异步多线程Socket的例子
如题,要简单一点的。
我自已写了一个,老是出现I/O冲突之类的。
我的应用环境是这样的,大概有40个客户端。和服务之间通信。
传输的数据量大概在0-2M之间,相当频繁。当然更大的数据也有(100M以上),不过很少。
传输的时候对可靠性要求非常高。
请问这个C/S该怎么设计?

------解决方案--------------------
http://topic.csdn.net/u/20090520/11/9d9ba552-95b7-4bba-be09-04b15285cb6e.html
------解决方案--------------------
mark 我也在找这方面的资料
------解决方案--------------------
http://www.cnblogs.com/Silverlight_Team/archive/2009/03/13/1411136.html
http://www.cnblogs.com/WCFGROUP/archive/2009/05/22/1304512.html
------解决方案--------------------
ding
------解决方案--------------------
//Socket基本编程
//服务端: 
using System.Net; 
using System.Net.Sockets; 
using System.Text; 
using System.Threading; 
Thread mythread ; 
Socket socket; 

// 清理所有正在使用的资源。 
protected override void Dispose( bool disposing ) 

 try 
 {    
  socket.Close();//释放资源 
  mythread.Abort ( ) ;//中止线程 
 } 
 catch{ } 
 if( disposing ) 
 { 
  if (components != null)
  { 
   components.Dispose(); 
  } 
 } 
 base.Dispose( disposing ); 


public static IPAddress GetServerIP() 

 IPHostEntry ieh=Dns.GetHostByName(Dns.GetHostName()); 
 return ieh.AddressList[0]; 


private void BeginListen() 

 IPAddress ServerIp=GetServerIP(); 
 IPEndPoint iep=new IPEndPoint(ServerIp,8000); 
 socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); 
 byte[] byteMessage=new byte[100]; 
 this.label1.Text=iep.ToString(); 
 socket.Bind(iep); 
 // do 
 while(true) 
 { 
  try 
  { 
   socket.Listen(5); 
   Socket newSocket=socket.Accept(); 
   newSocket.Receive(byteMessage); 
   string sTime = DateTime.Now.ToShortTimeString ( ) ; 
   string msg=sTime+":"+"Message from:"; 
   msg+=newSocket.RemoteEndPoint.ToString()+Encoding.Default.GetString(byteMessage); 
   this.listBox1.Items.Add(msg); 
 } 
  catch(SocketException ex) 
  { 
   this.label1.Text+=ex.ToString(); 
  } 
 } // while(byteMessage!=null); 


//开始监听 
private void button1_Click(object sender, System.EventArgs e) 

 try 
 { 
  mythread = new Thread(new ThreadStart(BeginListen)); 
  mythread.Start(); 
 } 
 catch(System.Exception er) 
 { 
  MessageBox.Show(er.Message,"完成",MessageBoxButtons.OK,MessageBoxIcon.Stop); 
 } 


//客户端: 
using System.Net; 
using System.Net.Sockets; 
using System.Text; 

private void button1_Click(object sender, System.EventArgs e) 

 BeginSend(); 
}

private void BeginSend() 

 string ip=this.txtip.Text; 
 string port=this.txtport.Text; 
 IPAddress serverIp=IPAddress.Parse(ip); 
 int serverPort=Convert.ToInt32(port); 
 IPEndPoint iep=new IPEndPoint(serverIp,serverPort); 
 byte[] byteMessage; 
 Socket socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); 
 socket.Connect(iep)