Socket网络编程(2)--服务端实现

时间:2023-03-09 14:39:55
Socket网络编程(2)--服务端实现

中秋了,首先祝大家中秋快乐,闲着无事在家整一个socket的聊天程序,有点仿QQ界面,就是瞎折腾,不知道最后是不是能将所有功能实现。

如果你对socket不了解,请看这篇文章:http://www.cnblogs.com/wolf-sun/p/3322300.html

可以让你快速对socket有个整体认识,如果你已经是socket网络编程高手,你可以忽略n个字,跳出本文章...

LZ想实现的功能有:

  1. 基本的聊天功能。
  2. 可以发送文件。
  3. 可以像qq那样发送震动。
  4. 可以截图,并发送。
  5. 可以在窗口中发送图片。
  6. 可以设置字体,字体颜色等功能。
  7. 最后也想实现视频语音等功能。

先将winform的客户端和服务端界面贴出来。山寨的我都不能忍了......

Socket网络编程(2)--服务端实现Socket网络编程(2)--服务端实现

虽然不知道qq中具体实现是什么方式的,但是按自己现有水平一步步实现每个功能,那也是非常大的挑战,毕竟自己也是刚接触socket网络编程,也只能做一个查一个,逼自己多动手。

这里用的是多行TextBox控件,但是不能放图片,是个最大的问题。想考虑试试webbrower控件。

服务端代码:

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms; namespace Wolfy.ChatServer
{
public partial class Server : Form
{
public Server()
{
InitializeComponent();
//不让其检查跨线程的操作
Control.CheckForIllegalCrossThreadCalls = false;
} private void btnSend_Click(object sender, EventArgs e)
{ } private void btnStartService_Click(object sender, EventArgs e)
{
//服务器ip地址
IPAddress ip = IPAddress.Parse(txtIPAddress.Text);
//ip地址和端口
IPEndPoint endpoint = new IPEndPoint(ip, int.Parse(txtPort.Text));
//创建用于监听的socket
Socket socketListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//绑定ip和端口
socketListener.Bind(endpoint);
//开始监听 限制连接数 最多可以连接10个
socketListener.Listen();
ShowMsg("开始监听......");
//创建线程 去监听连接
Thread th = new Thread(ListenConn);
//将线程变为后台线程
th.IsBackground = true;
th.Start(socketListener);
}
private void ListenConn(object o)
{
//将参数o 转化为监听的socket
Socket socketListener = o as Socket;
//写入循环 每一个连接就创建一个通信用的socket
while (true)
{
//当有客户端连接成功 创建通信用的socket
Socket connSocket = socketListener.Accept();
ShowMsg(connSocket.RemoteEndPoint + " " + DateTime.Now.ToString() + " 连接成功");
} }
/// <summary>
/// 提示信息辅助方法
/// </summary>
/// <param name="msg"></param>
private void ShowMsg(string msg)
{
this.txtMsgView.AppendText(msg + "\r\n");
}
}
}

首先测试服务端是否开始监听...运行命令 netstat -a -b

Socket网络编程(2)--服务端实现

可见服务端已经处于监听状态。

测试客户端和服务端的连接,这里使用telnet命令格式:telnet 127.0.0.1 50000

Socket网络编程(2)--服务端实现

从服务端结果可以看出多客户端连接是成功的,并且可以看到系统为客户端随机分配了两个端口:2511和2512

结语:

先写到这里,中秋了,也不能这样宅在家里啊,大家可以讨论一下,聊天信息窗口用什么控件比较好,可以支持文字输入又可以支持载入图片。

这种socket的聊天程序太多了,大家可能腻了,但是上篇文章简单学习了socket,我觉得还是动手操作一下比较好,毕竟,你知道和你动手做,是两码事!

happy,中秋节