`
qq173684423
  • 浏览: 26854 次
社区版块
存档分类
最新评论

Scoket 类似聊天

阅读更多
服务端
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;

namespace Sockets
{
    public partial class ServerForm : Form
    {
        Socket s = null;
        IPEndPoint iep = null;
        byte[] buf = new byte[1024];
        Socket worker = null;

        public ServerForm()
        {
            InitializeComponent();
            Control.CheckForIllegalCrossThreadCalls = false;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //创建一个通道
            s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //创建一个侦听点
            iep = new IPEndPoint(IPAddress.Any, 20000);
            //绑定到通道上
            s.Bind(iep);
            //侦听
            s.Listen(6);
            //通过异步来处理
            s.BeginAccept(new AsyncCallback(Accept), s);
            this.button1.Visible = false;
        }

        void Accept(IAsyncResult ia)
        {
            s = ia.AsyncState as Socket;
            //worker = s.EndAccept();
            worker = s.EndAccept(ia);
            s.BeginAccept(new AsyncCallback(Accept), s);
            try
            {
                worker.BeginReceive(buf, 0, buf.Length,SocketFlags.None, new AsyncCallback(Receive), worker);
            }
            catch
            { throw; }
        }

        void Receive(IAsyncResult ia)
        {
            worker = ia.AsyncState as Socket;
            int count = worker.EndReceive(ia);
            worker.BeginReceive(buf, 0, buf.Length, SocketFlags.None, new AsyncCallback(Receive), worker);
            string context = Encoding.GetEncoding("gb2312").GetString(buf, 0, count);
            this.textBox1.Text += Environment.NewLine;
            this.textBox1.Text += context;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            string context = "XXXXX" + this.textBox2.Text.Trim();
            if (context != "")
            {
                this.textBox1.Text += Environment.NewLine;
                this.textBox1.Text += context;
                this.textBox2.Text = "";
                worker.Send(Encoding.GetEncoding("gb2312").GetBytes(context));
            }
        }

        private void ServerForm_Load(object sender, EventArgs e)
        {

        }
    }
}

客户端
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;

namespace Sockets
{
    public partial class ClientForm : Form
    {
        Socket s = null;
        IPEndPoint iep = null;
        byte[] buf = new byte[1024];

        public ClientForm()
        {
            InitializeComponent();
            Control.CheckForIllegalCrossThreadCalls = false;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            iep = new IPEndPoint(IPAddress.Parse("192.168.10.131"), 20000);
            try
            {
                s.Connect(iep);
                this.label1.Text = "连接成功";
                this.button1.Visible = false;
            }
            catch
            { throw; }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            string context = iep.ToString() + ":" + this.textBox2.Text.Trim();
            if (context != "")
            {
                this.textBox1.Text += Environment.NewLine;
                this.textBox1.Text += context;
                this.textBox2.Text = "";
                s.Send(Encoding.GetEncoding("gb2312").GetBytes(context));
                try
                {
                    s.BeginReceive(buf, 0, buf.Length, SocketFlags.None, new AsyncCallback(Receive), s);
                }
                catch
                { throw; }
            }
        }

        void Receive(IAsyncResult ia)
        {
            s = ia.AsyncState as Socket;
            int count = s.EndReceive(ia);
            s.BeginReceive(buf, 0, buf.Length, SocketFlags.None, new AsyncCallback(Receive), s);
            string context = Encoding.GetEncoding("gb2312").GetString(buf, 0, count);
            this.textBox1.Text += Environment.NewLine;
            this.textBox1.Text += context;
        }

        private void ClientForm_Load(object sender, EventArgs e)
        {

        }
    }
}
分享到:
评论

相关推荐

    Java Socket聊天室

    Java Socket编写的聊天室,有用到多线程、Socket、输入输出流等相关知识。是个综合实例。局域网内多人聊天,类似qq群。

    C# SOCKET 通信源代码(类似聊天室)

    利用C#SOCKET写的类似聊天室的支持多客户端的通信程序,包括服务器端和客户端源代码

    SOCKET简单聊天实例.rar

    SOCKET简单聊天实例.rar 初学TCP SOCKET的程序员一定要先研究一下

    java socket简易聊天室

    使用java编写的类似聊天室的程序,在上次的基础上继续改进,将服务器端的IP地址写在配置文件里面,是程序的使用更加灵活,server.properties文件为配置文件,修改里面的ip地址为服务器端运行的ip地址即可使用。...

    socket 聊天室

    在TCP/IP网络通信环境下,Socket数据传输是一种特殊的I/O,它也相当于一种文件描述符,具有一个类似于打开文件的函数调用-socket()。可以这样理解:Socket实际上是一个通信端点,通过它,用户的Socket程序可以通过...

    基于socket的局域网聊天室程序 源代码

    基于socket的局域网聊天室程序 源代码,包含登录注册添加好友、一对多,一对一和查看聊天记录功能,类似一个小型qq,含客户端和服务端两部分。 运行时注意修改端口,还有本例用到数据库,注意环境配置

    EasyChat ,Java Socket编程,简易聊天程序

    聊天程序 JavaSocket编程,类似QQ的聊天程序(注册、登陆、聊天等) 1、界面模仿QQ界面,能够发起一对一聊天、接受聊天请求; 2、能够以当前日期和时间(精确到分)命名的文件来保持聊天记录; 3、能够调出聊天记录...

    基于Socket通信的聊天程序

    先启动服务器程序,弹出服务器初始化窗口,输入端口号,然后单击确定,弹出服务器的主窗口。接着启动客户端程序,弹出客户端登录...在客户端输入信息,按发送,就可以在服务器显示出来,这就实现了一个聊天的基本功能。

    c#基于Socket客户端服务端通信聊天

    类似socket中的listen。 Accept:可使用 Socket 或 TcpClient 来连接 TcpListener。 Stop():关闭侦听器。 至于Send和Receive,则由NetworkStream进行处理。 2.TcpClient(为 TCP 网络服务提供客户端连接) Connect:...

    Java应用开发(各小实验+综合设计基于Socket的聊天软件) 代码及文档.rar

    资源包含了:Java课程的6次小实验、综合设计基于Socket的聊天软件 的代码和文档。实验一(斐波那契数列)、实验二(类及其封装)、实验三(各种异常处理)、实验四(图形化设计_计算器)...2、多人聊天(类似QQ群聊)。

    多线程,Socket指定IP地址通讯(类似聊天软件)C#源代码示例

    使用多线程,Socket指定IP地址通讯(类似聊天软件) 可以进行一对一的聊天,通讯的 C#源代码示例

    C# Socket实现聊天通信

    这个实例是一个完整的使用Socket实现的聊天(只限于局域网,如果能提供一个高权限的IP就可以实现类似QQ聊天),其中的原理是:首先开启服务端,打开侦听(任何端口为6600的IP)

    android socket聊天室——也不仅仅是聊天室

    笔者很久之前其实就已经学习过了socket,当然也是用socket做过了聊天室,但是觉得此知识点比较一般,并无特别难的技术点,于是也并未深究。 然而近期一个项目中对socket的使用却让笔者感觉socket强大无比,可以实现...

    Socket 进程通信(类似QQ的聊天程序)

    自己编网络聊天程序,运用了Socket和进程通信,仅供参考 压缩包里包含了:源码+可执行程序。

    lt.rar_socket 网络通信_socket c/s_socket 多线程 聊天_socket 编程_局域网聊天

    类似于QQ的局域网聊天软件,包括服务器端和客户端程序,采用tcp/ip socket多线程编程,服务器端主要负责客户端用户的注册登陆,用户资料的获取.客户端负责与其他客户端进行信息控制与传递(包括聊天和传送文件).

    基于socket的多人聊天室。类似qq群聊。界面使用java swing编写.zip

    基于socket的多人聊天室。类似qq群聊。界面使用java swing编写

    ThinkPHP聊天室即时通讯系统 H5聊天系统APP源码 类似微信的聊天APP

    getWanWork作socket服务(socket 数据交互方式是二进制数据格式)。 redis缓存,特定模块用sqllite缓存模块数据。 mysql、mongodb 数据库。 JWT进行用户验证。 使用 http 进行发送文件 双端: 带有双端app源码...

    socket+多线程实现局域网聊天

    服务端开启多线程监听客户端,如果服务端收到客户端发过来的请求,服务端就会把某个机器输过来的信息进行转播出去,发给所有客户端,并带上Ip,所有客户端的控制台就可以看到某人说了什么话,类似一个局域网群聊,...

    socket编程(源码)

    本资料提供的是用Socket编程实现聊天程序。 有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,...

    linux_qq.rar_QQ协议_epoll 文件_linux socket epoll_linux项目_socket好友聊天

    该代码在Linux实现了一个类似于windows上的QQ的聊天工具。主要是基于TCP/IP协议的socket通信。包括服务器端和客户端两部分,其中客户端使用了select的IO多路复用技术,服务器端由于要监听多个客户端,因此使用了...

Global site tag (gtag.js) - Google Analytics