Socket網絡編程(2)--服務端實現

中秋了,首先祝你們中秋快樂,閒着無事在家整一個socket的聊天程序,有點仿QQ界面,就是瞎折騰,不知道最後是否是能將全部功能實現。html

若是你對socket不瞭解,請看這篇文章:http://www.cnblogs.com/wolf-sun/p/3322300.htmlweb

可讓你快速對socket有個總體認識,若是你已是socket網絡編程高手,你能夠忽略n個字,跳出本文章...編程

LZ想實現的功能有:服務器

  1. 基本的聊天功能。
  2. 能夠發送文件。
  3. 能夠像qq那樣發送震動。
  4. 能夠截圖,併發送。
  5. 能夠在窗口中發送圖片。
  6. 能夠設置字體,字體顏色等功能。
  7. 最後也想實現視頻語音等功能。

先將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,中秋節

相關文章
相關標籤/搜索