中秋了,首先祝你们中秋快乐,闲着无事在家整一个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,中秋节