中秋了,首先祝大家中秋快乐,闲着无事在家整一个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控件。

服务端代码:

 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

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

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

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

结语:

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

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

happy,中秋节

Socket网络编程(2)--服务端实现的更多相关文章

  1. 第5章-unix网络编程 TCP/服务端程序示例

    这一章主要是完成一个完整的tcp客户/服务器程序.通过一很简单的例子.弄清客户和服务器如何启动,如何终止,发生了某些错误会发生什么.这些事很重要的  客户端代码 #include "unp. ...

  2. Java网络编程(TCP服务端)

    /* * TCP服务端: * 1.创建服务端socket服务,并监听一个端口 * 2.服务端为了给客户端提供服务,获取客户端的内容,可以通过accept方法获取连接过来的客户端对象 * 3.可以通过获 ...

  3. java网络编程-单线程服务端与客户端通信

    该服务器一次只能处理一个客户端请求;p/** * 利用Socket进行简单服务端与客户端连接 * 这是服务端 */public class EchoServer { private ServerSoc ...

  4. 【网络编程】服务端产生大量的close_wait状态的进程分析

    首先要明白close_wait状态是在tcp通信四次握手时的一个中间状态: 即当被动关闭方发送完ACK后进入的状态.这个状态的结束,即要达到下一个状态LASK_ACK需要在发无端发送完剩余的数据后(s ...

  5. 网络编程~~~~socketserver服务端

    socketserver服务端 import socketserver class MyServer(socketserver.BaseRequestHandler): def handle(self ...

  6. socket网络编程登录实现及多客户端和服务端的数据交互

    一.TCP/IP 客户端 package com.demo.entity; import java.io.Serializable; public class UserInfo implements ...

  7. socket 网络编程高速入门(一)教你编写基于UDP/TCP的服务(client)通信

    由于UNIX和Win的socket大同小异,为了方便和大众化,这里先介绍Winsock编程. socket 网络编程的难点在入门的时候就是对基本函数的了解和使用,由于这些函数的结构往往比較复杂,參数大 ...

  8. Linux Socket 网络编程

    Linux下的网络编程指的是socket套接字编程,入门比较简单.在学校里学过一些皮毛,平时就是自学玩,没有见识过真正的socket编程大程序,比较遗憾.总感觉每次看的时候都有收获,但是每次看完了之后 ...

  9. Python Socket 网络编程

    Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...

随机推荐

  1. 数据摘要算法的测试效率(SHA、MD5和CRC32)

    1.算法概述 数据摘要算法是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名.数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密.数据摘要算法也被称为哈希(H ...

  2. Java系列:国际化(zz)

    国际化英文单词为:Internationalization,又称I18N,I为因为单词的第一个字母,18为这个单词的长度,而N代表这个单词的最后一个字母.国际化又称本地化(Localization,L ...

  3. 实验五实验报告 20135324&&20135330

    北京电子科技学院(BESTI) 实验报告 课程:深入理解计算机系统 班级:1353 姓名:张若嘉 杨舒雯 学号:20135330 20135324 成绩: 指导教师:娄嘉鹏 实验日期:2015.11. ...

  4. 20145208 《Java程序设计》第5周学习总结

    20145208 <Java程序设计>第5周学习总结 教材学习内容总结 语法和继承架构 异常处理关键字 第八章内容主要是对Java的异常处理,所以我先了解了一下关键字 Java的异常处理是 ...

  5. Qt opencv程序运行异常

    搭建了两次qt opencv vs ,经常出现程序运行异常.找了几个原因如下: 1.opencv的路径未配置或配置有误. 2.qt中pro文件包含不正确. 3.测试opencv程序不正确.如视频或图片 ...

  6. WebStorm在Mac上的快捷键(部分)

    整理一下在Mac上使用WS这款IDE的快捷键 shift + Enter 软回车 ,无论在前一行代码的什么位置,都能定位到下一行. command 显示/隐藏 左侧面板 command + b / 点 ...

  7. 【原创】基于Memcached 实现用户登录的Demo(附源码)

    一个简单的Memcached在Net中运用的一个demo.主要技术 Dapper+MVC+Memcached+sqlserver, 开发工具为vs2015+Sql 效果图如下: 登录后 解决方案 主要 ...

  8. Android中图片大小和屏幕密度的关系讲解

    Android手机适配是非常让人头疼的一件事,尤其是图片,android为了做到是适配提供了很多文件夹来存放不同大小的图片,比如:drawable-ldpi.drawable-mdpi.drawabl ...

  9. Oracle 索引

    索引是建立在数据库表中的某些列的上面,是与表关联的,可提供快速访问数据方式,但会影响增删改的效率:常用类型(按逻辑分类):单列索引和组合索引.唯一索引和非唯一索引. 什么时候要创建索引 (1)在经常需 ...

  10. sax技术操作xml

    package com.xml.zh; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers. ...