简单的C# Socket编程(2) 只是一个简单的示例。Server,服务器代码。使用Socket套接字连接。 using System; using System.Net; using System.Net.Sockets; using System.IO ; public class Echoserver { //entry point of main method. public static void Main() { //TcpListener is listening on the given port Int32 port = 1234; //IPAddress is connetct ip address //IPAddress addr = IPAddress.Parse("127.0.0.1"); IPAddress ipAddress = Dns.Resolve("localhost").AddressList[0]; TcpListener tcpListener = new TcpListener(ipAddress,port); tcpListener.Start(); Console.WriteLine("Server Started") ; //Accepts a new connection Socket socketForClient = tcpListener.AcceptSocket(); //StreamWriter and StreamReader Classes for reading and writing the data to and from. //The server reads the meassage sent by the Client ,converts it to upper case and sends it back to the client. //Lastly close all the streams. try { if (socketForClient.Connected) { while(true) { Console.WriteLine("Client connected"); NetworkStream networkStream = new NetworkStream(socketForClient); StreamWriter streamWriter = new StreamWriter(networkStream); StreamReader streamReader = new StreamReader(networkStream); string line = streamReader.ReadLine(); Console.WriteLine("Read:" +line); line=line.ToUpper()+ "!"; streamWriter.WriteLine(line); Console.WriteLine("Wrote:"+line); streamWriter.Flush() ; } } socketForClient.Close(); Console.WriteLine("Exiting"); } catch(Exception e) { Console.WriteLine(e.ToString()) ; } } } Client,客户端程序,在文本框中输入字符,将在列表框显示。 using System; using System.Text; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Net; using System.Net.Sockets; using System.IO; namespace SocketSample { public class Sample : System.Windows.Forms.Form { private System.Windows.Forms.Button btS; private System.Windows.Forms.TextBox t1; private NetworkStream networkStream ; private StreamReader streamReader ; private StreamWriter streamWriter ; ArrayList sb; TcpClient myclient; bool flag=false; private System.Windows.Forms.ListBox t2; private System.ComponentModel.Container components = null; public Sample() { sb = new ArrayList(); InitializeComponent(); if(!flag) Connect(); //get a Network stream from the server networkStream = myclient.GetStream(); streamReader = new StreamReader(networkStream); streamWriter = new StreamWriter(networkStream); ShowMessage(); } protected override void Dispose( bool disposing ) { if( disposing ) { if(components != null) { components.Dispose(); } } base.Dispose( disposing ); } //Windows 窗体设计器生成的代码#region Windows 窗体设计器生成的代码 /** <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Sample)); this.t1 = new System.Windows.Forms.TextBox(); this.btS = new System.Windows.Forms.Button(); this.t2 = new System.Windows.Forms.ListBox(); this.SuspendLayout(); // // t1 // this.t1.Location = new System.Drawing.Point(24, 32); this.t1.Name = "t1"; this.t1.Size = new System.Drawing.Size(280, 21); this.t1.TabIndex = 0; this.t1.Text = ""; this.t1.TextChanged += new System.EventHandler(this.t1_TextChanged); // // btS // this.btS.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("btS.BackgroundImage"))); this.btS.Enabled = false; this.btS.FlatStyle = System.Windows.Forms.FlatStyle.Popup; this.btS.Location = new System.Drawing.Point(320, 32); this.btS.Name = "btS"; this.btS.TabIndex = 1; this.btS.Text = "Send"; this.btS.Click += new System.EventHandler(this.btS_Click); // // t2 // this.t2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.t2.Font = new System.Drawing.Font("Courier New", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.t2.ItemHeight = 15; this.t2.Location = new System.Drawing.Point(24, 64); this.t2.Name = "t2"; this.t2.Size = new System.Drawing.Size(368, 212); this.t2.TabIndex = 2; // // Sample // this.AutoScaleBaseSize = new System.Drawing.Size(6, 14); this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage"))); this.ClientSize = new System.Drawing.Size(416, 297); this.Controls.Add(this.t2); this.Controls.Add(this.btS); this.Controls.Add(this.t1); this.Name = "Sample"; this.Text = "Sample"; this.ResumeLayout(false); } #endregion public static void Main() { Sample df=new Sample(); df.FormBorderStyle=FormBorderStyle.Fixed3D; Application.Run(df); } protected void Connect() { //connect to the "localhost" at the give port //if you have some other server name then you can use that instead of "localhost" try { sb.Add("Conneting to Server"); myclient = new TcpClient("localhost", 1234); sb.Add("Conneted,Please enter something in the textbox"); } catch { sb.Add(string.Format("Failed to connect to server at {0}:1234", "localhost")); } flag = true; } protected void ShowMessage() { for(int i=0;i<sb.Count;i++) { t2.Items.Add((object)sb[i].ToString()); } sb.Clear(); } private void t1_TextChanged(object sender, System.EventArgs e) { if(t1.Text == "" ) btS.Enabled = false; else btS.Enabled=true; } private void btS_Click(object sender, System.EventArgs e) { if(t1.Text=="") { sb.Add( "Please enter something in the textbox."); t1.Focus(); return ; } string s; try { streamWriter.WriteLine(t1.Text); Console.WriteLine("Sending Message"); streamWriter.Flush(); s= streamReader.ReadLine(); Console.WriteLine("Reading Message") ; Console.WriteLine(s) ; sb.Add(s); t1.Text = ""; t1.Focus(); ShowMessage(); } catch { MessageBox.Show("Error."); } } } }