asp.net Socket 实例

69 篇文章 0 订阅
本文介绍了一个使用 C# 实现的简单 Socket 客户端和服务器通信程序。该程序能够通过 TCP 协议进行数据收发,并在客户端与服务器之间建立稳定的连接。文中展示了如何创建 Socket 对象、进行连接、发送与接收数据,以及如何处理异常。
摘要由CSDN通过智能技术生成
[csharp]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1.   
[csharp]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. public class Socketclient  
  2.     {  
  3.         TextBox txt;  
  4.         TextBox send_txt;  
  5.         public Socketclient(TextBox txt, TextBox send_txt)  
  6.         {  
  7.             this.txt = txt;  
  8.             this.send_txt = send_txt;  
  9.         }  
  10.         public void StartClient()  
  11.         {  
  12.             // Data buffer for incoming data.  
  13.             byte[] bytes = new byte[1024];  
  14.   
  15.             // Connect to a remote device.  
  16.             try  
  17.             {  
  18.                 // Establish the remote endpoint for the socket.  
  19.                 // This example uses port 11000 on the local computer.  
  20.                 IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());  
  21.                 IPAddress ipAddress = ipHostInfo.AddressList[0];  
  22.                 IPEndPoint remoteEP = new IPEndPoint(ipAddress, 1234);  
  23.                 // Create a TCP/IP  socket.  
  24.                 Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);  
  25.   
  26.                 // Connect the socket to the remote endpoint. Catch any errors.  
  27.                 try  
  28.                 {  
  29.                     sender.Connect(remoteEP);  
  30.                     // Console.WriteLine("Socket connected to {0}",sender.RemoteEndPoint.ToString());  
  31.                     txt.Text += "\r\n" + sender.RemoteEndPoint.ToString() + "\r\n";  
  32.                     // Encode the data string into a byte array.  
  33.                     byte[] msg = Encoding.ASCII.GetBytes(send_txt.Text + "<EOF>");  
  34.                     // Send the data through the socket.  
  35.                     int bytesSent = sender.Send(msg);  
  36.                     // Receive the response from the remote device.  
  37.                     int bytesRec = sender.Receive(bytes);  
  38.                     //Console.WriteLine("Echoed test = {0}",Encoding.ASCII.GetString(bytes,0,bytesRec));  
  39.                     txt.Text += "\r\n" + Encoding.ASCII.GetString(bytes, 0, bytesRec) + "\r\n";//接收远程服务器信息  
  40.   
  41.                     // Release the socket.  
  42.                     sender.Shutdown(SocketShutdown.Both);  
  43.                     sender.Close();  
  44.                 }  
  45.                 catch (ArgumentNullException ane)  
  46.                 {  
  47.                     // Console.WriteLine("ArgumentNullException : {0}",ane.ToString());  
  48.                     txt.Text += "\r\n" + ane.ToString() + "\r\n";  
  49.                 }  
  50.                 catch (SocketException se)  
  51.                 {  
  52.                     // Console.WriteLine("SocketException : {0}",se.ToString());  
  53.                     txt.Text += "\r\n" + se.ToString() + "\r\n";  
  54.                 }  
  55.                 catch (Exception e)  
  56.                 {  
  57.                     // Console.WriteLine("Unexpected exception : {0}", e.ToString());  
  58.                     txt.Text += "\r\n" + e.ToString() + "\r\n";  
  59.                 }  
  60.             }  
  61.             catch (Exception e)  
  62.             {  
  63.                 // Console.WriteLine( e.ToString());  
  64.                 txt.Text += "\r\n" + e.ToString() + "\r\n";  
  65.             }  
  66.         }  
  67.     }  
  68.  public class SocketServer {  
  69.       
  70.      int port;  //端口  
  71.      string host;//ip地址  
  72.      TextBox txt;  
  73.      /// <summary>  
  74.      /// 构造涵数  
  75.      /// </summary>  
  76.      /// <param name="ports">端口号</param>  
  77.      public SocketServer(int ports, string host,TextBox txt)  
  78.      {  
  79.        this.port=ports;  
  80.        this.host = host;  
  81.        this.txt = txt;  
  82.      }      
  83.      //开始监听  
  84.     public void beginListen(){          
  85.         try  
  86.         {  
  87.             IPAddress ip = IPAddress.Parse(host);//把ip地址字符串转换为IPAddress类型的实例  
  88.             IPEndPoint ipe = new IPEndPoint(ip, port);//用指定的端口和ip初始化IPEndPoint类的新实例  
  89.             ///创建socket并开始监听  
  90.             Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个socket对像,如果用udp协议,则要用SocketType.Dgram类型的套接字  
  91.             s.Bind(ipe);//绑定EndPoint对像(端口和ip地址)  
  92.             s.Listen(0);//开始监听  
  93.             txt.Text += "等待客户端连接";  
  94.            // Console.WriteLine("等待客户端连接");  
  95.             //定义循环,以便可以简历多次连接  
  96.             while (true)  
  97.             {  
  98.                 Socket temp = s.Accept();//为新建连接创建新的socket                 
  99.                 while (true)  
  100.                 {  
  101.                     string recvStr = "";  
  102.                     byte[] recvBytes = new byte[1024];  
  103.                     int bytes;  
  104.                     bytes = temp.Receive(recvBytes, recvBytes.Length, 0);//从客户端接受信息  
  105.                     recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);  
  106.                     txt.Text += "\r\n" + recvStr + "\r\n";  
  107.                     if (recvStr.IndexOf("<EOF>") > -1)  
  108.                     {  
  109.                         break;  
  110.                     }  
  111.                 }                  
  112.                 //给client端返回信息  
  113.                // Console.WriteLine("server get message:{0}", recvStr);//把客户端传来的信息显示出来  
  114.                  
  115.                 string sendStr = "jpeg upload OK";  
  116.                 byte[] bs = Encoding.ASCII.GetBytes(sendStr);  
  117.                 temp.Send(bs, bs.Length, 0);//返回信息给客户端  
  118.                 temp.Shutdown(SocketShutdown.Both);  
  119.                 temp.Close();              
  120.   
  121.             }  
  122.         }  
  123.         catch (Exception ex)  
  124.         {  
  125.             string str = ex.ToString();  
  126.             txt.Text += "\r\n" + str + "\r\n";  
  127.         }  
  128.     }  
  129. }}  

 

客户端按钮事件

[csharp]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. protected void Button1_Click(object sender, EventArgs e)  
  2.      {  
  3.              Socketclient client = new Socketclient(TextBox2, TextBox3);  
  4.              client.StartClient();  
  5.           
  6.      }  


//服务端监听执行线程

[csharp]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. protected void Page_Load(object sender, EventArgs e)  
  2.         {  
  3.             if (!IsPostBack)  
  4.             {  
  5.                 SocketServer socket = new SocketServer(1234, "192.168.88.196", TextBox1);  
  6.                 //启动线程  
  7.                 Thread thread = new Thread(new ThreadStart(socket.beginListen));  
  8.                 thread.Start();  
  9.                 // 在应用程序启动时运行的代码  
  10.                 //(new System.Threading.Thread(new System.Threading.ThreadStart(new Class1().CreatSocket))).Start();//开辟一个新线程  
  11.             }  
  12.         }  


aspx

[html]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="JpegForSocketServer.aspx.cs" Inherits="WebForAndroid.JpegForSocketServer" %>  
  2.   
  3. <!DOCTYPE html>  
  4.   
  5. <html xmlns="http://www.w3.org/1999/xhtml">  
  6. <head runat="server">  
  7. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>  
  8.     <title></title>  
  9. </head>  
  10. <body>  
  11.     <form id="form1" runat="server">  
  12.     <div>  
  13.         <asp:TextBox ID="TextBox1" runat="server" Height="206px" TextMode="MultiLine" Width="700px" ></asp:TextBox>  
  14.     </div>  
  15.         <hr />  
  16.         <asp:TextBox ID="TextBox2" runat="server" Height="197px" TextMode="MultiLine" Width="376px"></asp:TextBox>  
  17.         <asp:TextBox ID="TextBox3" runat="server" Height="119px" TextMode="MultiLine"></asp:TextBox>  
  18.         <asp:Button ID="Button1" runat="server" Height="52px" OnClick="Button1_Click" Text="SEND" Width="138px" />  
  19.     </form>  
  20. </body>  
  21. </html>  


图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值