zoukankan      html  css  js  c++  java
  • 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的客户端和服务端界面贴出来。山寨的我都不能忍了......

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

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

    服务端代码:

     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 + "
    ");
    69         }
    70     }
    71 }

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

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

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

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

    结语:

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

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

    happy,中秋节

  • 相关阅读:
    GO-GRPC实践(二) 增加拦截器,实现自定义context(带request_id)、recover以及请求日志打印
    第六章-堆
    第五章-本地方法接口和本地方法栈
    第四章-虚拟机栈
    第三章-运行时数据区及程序计数器
    04-再谈类的加载器
    03-类的加载过程(类的生命周期)详解
    1.编程入门
    SpringBoot 整合 SpringSecurity 梳理
    pip版本过低无法升级问题
  • 原文地址:https://www.cnblogs.com/wolf-sun/p/3329558.html
Copyright © 2011-2022 走看看