简单的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
posted @ 2005-07-23 01:26  tsyung  阅读(22927)  评论(7编辑  收藏  举报