• 简单的C# Socket编程


    只是一个简单的示例。

    Server,服务器代码。
    使用Socket套接字连接。

     1using System;
     2using System.Net;
     3using System.Net.Sockets;
     4using System.IO ;
     5
     6public class Echoserver
     7{
     8    //entry point of main method.
     9    public static void Main()
    10    {
    11        //TcpListener is listening on the given port
    12        Int32 port = 1234;
    13
    14        //IPAddress is connetct ip address
    15        //IPAddress addr = IPAddress.Parse("127.0.0.1");
    16        IPAddress ipAddress = Dns.Resolve("localhost").AddressList[0];
    17
    18        TcpListener tcpListener = new TcpListener(ipAddress,port);
    19        tcpListener.Start();      
    20        Console.WriteLine("Server Started") ;            
    21        //Accepts a new connection
    22        Socket socketForClient = tcpListener.AcceptSocket();            
    23        //StreamWriter and StreamReader Classes for reading and writing the data to and from.
    24        //The server reads the meassage sent by the Client ,converts it to upper case and sends it back to the client.
    25        //Lastly close all the streams.
    26        try
    27        {
    28            if (socketForClient.Connected)
    29            {
    30                while(true)
    31                {
    32                    Console.WriteLine("Client connected");
    33                    NetworkStream networkStream = new NetworkStream(socketForClient);
    34                    StreamWriter streamWriter = new StreamWriter(networkStream);
    35                    StreamReader streamReader = new StreamReader(networkStream);
    36                    string line = streamReader.ReadLine();
    37                    Console.WriteLine("Read:" +line);
    38                    line=line.ToUpper()+ "!";
    39                    streamWriter.WriteLine(line);
    40                    Console.WriteLine("Wrote:"+line);
    41                    streamWriter.Flush() ;                      
    42                }
     
    43            }

    44            socketForClient.Close();            
    45            Console.WriteLine("Exiting");
    46        }

    47        catch(Exception e)
    48        {
    49            Console.WriteLine(e.ToString()) ;
    50        }

    51    }

    52}

    53
    54

    Client,客户端程序,在文本框中输入字符,将在列表框显示。
      1using System;
      2using System.Text;
      3using System.Drawing;
      4using System.Collections;
      5using System.ComponentModel;
      6using System.Windows.Forms;
      7using System.Net;
      8using System.Net.Sockets;
      9using System.IO;
     10
     11namespace SocketSample
     12{
     13    public class Sample : System.Windows.Forms.Form
     14    {
     15        private System.Windows.Forms.Button btS;
     16        private System.Windows.Forms.TextBox t1;
     17        private NetworkStream networkStream ;
     18        private StreamReader streamReader ;
     19        private StreamWriter streamWriter ;
     20        ArrayList sb;
     21        TcpClient myclient;
     22        bool flag=false;
     23        private System.Windows.Forms.ListBox t2;
     24
     25        private System.ComponentModel.Container components = null;
     26
     27        public Sample()
     28        {
     29            sb = new ArrayList();
     30            InitializeComponent();
     31            if(!flag)
     32                Connect();
     33
     34            //get a Network stream from the server
     35            networkStream = myclient.GetStream();
     36            streamReader = new StreamReader(networkStream);
     37            streamWriter = new StreamWriter(networkStream);
     38            ShowMessage();
     39        }

     40
     41        protected override void Dispose( bool disposing )
     42        {
     43            if( disposing )
     44            {
     45                if(components != null)
     46                {
     47                    components.Dispose();
     48                }

     49            }

     50            base.Dispose( disposing );
     51        }

     52
     53        #region Windows 窗体设计器生成的代码
     54        /// <summary>
     55        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
     56        /// 此方法的内容。
     57        /// </summary>

     58        private void InitializeComponent()
     59        {
     60            System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Sample));
     61            this.t1 = new System.Windows.Forms.TextBox();
     62            this.btS = new System.Windows.Forms.Button();
     63            this.t2 = new System.Windows.Forms.ListBox();
     64            this.SuspendLayout();
     65            // 
     66            // t1
     67            // 
     68            this.t1.Location = new System.Drawing.Point(2432);
     69            this.t1.Name = "t1";
     70            this.t1.Size = new System.Drawing.Size(28021);
     71            this.t1.TabIndex = 0;
     72            this.t1.Text = "";
     73            this.t1.TextChanged += new System.EventHandler(this.t1_TextChanged);
     74            // 
     75            // btS
     76            // 
     77            this.btS.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("btS.BackgroundImage")));
     78            this.btS.Enabled = false;
     79            this.btS.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
     80            this.btS.Location = new System.Drawing.Point(32032);
     81            this.btS.Name = "btS";
     82            this.btS.TabIndex = 1;
     83            this.btS.Text = "Send";
     84            this.btS.Click += new System.EventHandler(this.btS_Click);
     85            // 
     86            // t2
     87            // 
     88            this.t2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
     89            this.t2.Font = new System.Drawing.Font("Courier New", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
     90            this.t2.ItemHeight = 15;
     91            this.t2.Location = new System.Drawing.Point(2464);
     92            this.t2.Name = "t2";
     93            this.t2.Size = new System.Drawing.Size(368212);
     94            this.t2.TabIndex = 2;
     95            // 
     96            // Sample
     97            // 
     98            this.AutoScaleBaseSize = new System.Drawing.Size(614);
     99            this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage")));
    100            this.ClientSize = new System.Drawing.Size(416297);
    101            this.Controls.Add(this.t2);
    102            this.Controls.Add(this.btS);
    103            this.Controls.Add(this.t1);
    104            this.Name = "Sample";
    105            this.Text = "Sample";
    106            this.ResumeLayout(false);
    107
    108        }

    109        #endregion

    110
    111        public static void Main()
    112        {
    113            Sample df=new Sample();
    114            df.FormBorderStyle=FormBorderStyle.Fixed3D;
    115            Application.Run(df);
    116        }

    117
    118        protected void Connect()
    119        {            
    120            //connect to the "localhost" at the give port
    121            //if you have some other server name then you can use that instead of "localhost"
    122    
    123            try
    124            {
    125                sb.Add("Conneting to Server");
    126                myclient = new TcpClient("localhost"1234);
    127                sb.Add("Conneted,Please enter something in the textbox");
    128            }

    129            catch
    130            {
    131                sb.Add(string.Format("Failed to connect to server at {0}:1234""localhost"));
    132            }

    133            flag = true;
    134        }

    135
    136        protected void ShowMessage()
    137        {
    138            for(int i=0;i<sb.Count;i++)
    139            {
    140                t2.Items.Add((object)sb[i].ToString());
    141            }

    142            sb.Clear();
    143        }

    144
    145        private void t1_TextChanged(object sender, System.EventArgs e)
    146        {
    147            if(t1.Text == "" )
    148                btS.Enabled = false;
    149            else
    150                btS.Enabled=true;
    151        }

    152
    153        private void btS_Click(object sender, System.EventArgs e)
    154        {
    155            if(t1.Text=="")
    156            {
    157                sb.Add( "Please enter something in the textbox.");
    158                t1.Focus();
    159                return ;
    160            }

    161            string s;
    162            try
    163            {            
    164                streamWriter.WriteLine(t1.Text);
    165                Console.WriteLine("Sending Message");
    166                streamWriter.Flush();
    167                s= streamReader.ReadLine();
    168                Console.WriteLine("Reading Message") ;
    169                Console.WriteLine(s) ;
    170                sb.Add(s);
    171                t1.Text = "";
    172                t1.Focus();
    173                ShowMessage();
    174            }

    175            catch
    176            {
    177                MessageBox.Show("Error.");
    178            }
        
    179        }

    180    }

    181}

    182
  • 相关阅读:
    template.js简单入门
    Tortoisegit和GitHub使用入门
    自定义Http请求头并且获取
    Dapper基础入门
    StackExchange.Redis在net中使用
    领域驱动设计(DDD)
    Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM) AspectJ
    重构流程
    性能优化方法论举例(***)
    线上紧急问题,如宕机、卡顿、bug等,如何快速反应和解决,具体解决方案
  • 原文地址:https://www.cnblogs.com/qingyang/p/198468.html
Copyright © 2020-2023  润新知