中秋了,首先祝你們中秋快樂,閒着無事在家整一個socket的聊天程序,有點仿QQ界面,就是瞎折騰,不知道最後是否是能將全部功能實現。html
若是你對socket不瞭解,請看這篇文章:http://www.cnblogs.com/wolf-sun/p/3322300.htmlweb
可讓你快速對socket有個總體認識,若是你已是socket網絡編程高手,你能夠忽略n個字,跳出本文章...編程
LZ想實現的功能有:服務器
先將winform的客戶端和服務端界面貼出來。山寨的我都不能忍了......網絡
雖然不知道qq中具體實現是什麼方式的,可是按本身現有水平一步步實現每一個功能,那也是很是大的挑戰,畢竟本身也是剛接觸socket網絡編程,也只能作一個查一個,逼本身多動手。併發
這裏用的是多行TextBox控件,可是不能放圖片,是個最大的問題。想考慮試試webbrower控件。app
服務端代碼:socket
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Net; 8 using System.Net.Sockets; 9 using System.Text; 10 using System.Threading; 11 using System.Threading.Tasks; 12 using System.Windows.Forms; 13 14 namespace Wolfy.ChatServer 15 { 16 public partial class Server : Form 17 { 18 public Server() 19 { 20 InitializeComponent(); 21 //不讓其檢查跨線程的操做 22 Control.CheckForIllegalCrossThreadCalls = false; 23 } 24 25 private void btnSend_Click(object sender, EventArgs e) 26 { 27 28 } 29 30 private void btnStartService_Click(object sender, EventArgs e) 31 { 32 //服務器ip地址 33 IPAddress ip = IPAddress.Parse(txtIPAddress.Text); 34 //ip地址和端口 35 IPEndPoint endpoint = new IPEndPoint(ip, int.Parse(txtPort.Text)); 36 //建立用於監聽的socket 37 Socket socketListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 38 //綁定ip和端口 39 socketListener.Bind(endpoint); 40 //開始監聽 限制鏈接數 最多能夠鏈接10個 41 socketListener.Listen(10); 42 ShowMsg("開始監聽......"); 43 //建立線程 去監聽鏈接 44 Thread th = new Thread(ListenConn); 45 //將線程變爲後臺線程 46 th.IsBackground = true; 47 th.Start(socketListener); 48 } 49 private void ListenConn(object o) 50 { 51 //將參數o 轉化爲監聽的socket 52 Socket socketListener = o as Socket; 53 //寫入循環 每個鏈接就建立一個通訊用的socket 54 while (true) 55 { 56 //當有客戶端鏈接成功 建立通訊用的socket 57 Socket connSocket = socketListener.Accept(); 58 ShowMsg(connSocket.RemoteEndPoint + " " + DateTime.Now.ToString() + " 鏈接成功"); 59 } 60 61 } 62 /// <summary> 63 /// 提示信息輔助方法 64 /// </summary> 65 /// <param name="msg"></param> 66 private void ShowMsg(string msg) 67 { 68 this.txtMsgView.AppendText(msg + "\r\n"); 69 } 70 } 71 }
首先測試服務端是否開始監聽...運行命令 netstat -a -b學習
可見服務端已經處於監聽狀態。測試
測試客戶端和服務端的鏈接,這裏使用telnet命令格式:telnet 127.0.0.1 50000
從服務端結果能夠看出多客戶端鏈接是成功的,而且能夠看到系統爲客戶端隨機分配了兩個端口:2511和2512
結語:
先寫到這裏,中秋了,也不能這樣宅在家裏啊,你們能夠討論一下,聊天信息窗口用什麼控件比較好,能夠支持文字輸入又能夠支持載入圖片。
這種socket的聊天程序太多了,你們可能膩了,可是上篇文章簡單學習了socket,我以爲仍是動手操做一下比較好,畢竟,你知道和你動手作,是兩碼事!
happy,中秋節