文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>C#中面向连接Socket编程(结合Encod..

C#中面向连接Socket编程(结合Encod..

时间:2010-10-23  来源:sunzongbao2007

============================================ ============================================ 由于是尝试性的东西,客户端与服务端写在同一个类下 生成一个本机通信的exe ============================================   using System;//基础需要 using System.Net;//IPAddress,IPEndPoint需要 using System.Text;//Encoding需要 using System.Threading;//线程需要 using System.Net.Sockets;//Socket需要 class SocketTest { public static Socket server=null; public static Socket client=null; public static Socket user=null; public static byte[] clientData=null;//服务端接收client的byte缓冲区 public static byte[] userData=null;//客户端发送数据byte缓冲区 public static void Main(){ clientData=new byte[128]; userData=new byte[128];//设置缓冲区大小为128 //IPAddress是C#中对IP的封装 IPAddress ip0=IPAddress.Parse("127.0.0.1"); //IPEndPoint是C#中对端口与IP的封装 IPEndPoint endPoint=new IPEndPoint(ip0,8080); Console.WriteLine(endPoint.ToString()); Console.WriteLine(endPoint.Address); Console.WriteLine(endPoint.Port); //服务端ServerSocket,也是一个Socket,但是他要负责执行Accept进行等待 //参数列表为(网络类型,Socket数据传输方式,协议) server=new Socket(endPoint.AddressFamily,SocketType.Stream,ProtocolType.Tcp); //将服务端与端口绑定 server.Bind(endPoint); //设定允许的排队队列大小 server.Listen(100); //线程列表中加入包含Accept的线程 ThreadPool.QueueUserWorkItem(new WaitCallback(accepting)); //模拟用户加入的线程 ThreadPool.QueueUserWorkItem(new WaitCallback(userComing)); //模拟服务端接收到的用户端socket信息,负责接受与发送数据 ThreadPool.QueueUserWorkItem(new WaitCallback(clientWorking)); Console.WriteLine(server.ToString()); //主进程等待1秒,等待以上三个线程执行(unsafe) Thread.Sleep(1000); //模拟客户端发送数据 String tmp=""; while(true){ tmp=Console.ReadLine(); //将客户端输入的数据以UTF8的格式转换成byte userData=Encoding.UTF8.GetBytes(tmp); //发送数据(socket发送数据只能以byte数组方式发送) user.Send(userData); } //Console.ReadLine(); } //模拟服务端与连接到的客户端交接的管理型client public static void clientWorking(Object stateInfo){ //实例一个length,存储接收到的消息长度 int length=0; while(true){ if(client!=null){ //Receive返回接收到的数据大小 length=client.Receive(clientData,clientData.Length,0); //将接收到的byte以UTF8格式转换回字符串,长度为length,否则转换后整个缓冲区的 //数据都会出现,干扰 Console.WriteLine(Encoding.UTF8.GetString(clientData,0,length)); } } } //模拟服务端的对应用户管理socket(unsafe) public static void accepting(Object stateInfo){ while(true){ client=server.Accept(); break; } } //客户端(unsafe) public static void userComing(Object stateInfo){ IPAddress ip1=IPAddress.Parse("127.0.0.1"); IPEndPoint userEndPoint=new IPEndPoint(ip1,8080); user=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); user.Connect(userEndPoint);   }       }
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载