简易聊天室

服务端

using System;

class Launch
{
    static void Main(string[] args)
    {
        Server s = new Server("192.168.1.157", 8000);
        s.InitServer();
        s.Listener(0);
        Console.ReadKey();
    }
}
---
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Collections.Generic;

public delegate void RemoveCallBack(ClientSocket cs);
public delegate void BroadCastCallBack(string msg, ClientSocket cs);

public class Server
{
    string ip;
    int port, index = 0;
    IPAddress id;
    IPEndPoint iPEndPoint;
    List<ClientSocket> clientSockets;
    public Socket serverSocket;

    public Server(string ip, int port)
    {
        this.ip = ip;
        this.port = port;
        clientSockets = new List<ClientSocket>();
    }

    public void InitServer()
    {
        AddressFamily af = AddressFamily.InterNetwork;
        SocketType st = SocketType.Stream;
        ProtocolType pt = ProtocolType.Tcp;
        serverSocket = new Socket(af, st, pt);
        BindIPAndPort();
    }

    private void BindIPAndPort()
    {
        if(string.IsNullOrEmpty(ip) || port == default(int))
        {
            Console.WriteLine("serverSocket ip or port is null!!!");
            return;
        }
        id = IPAddress.Parse(ip);
        iPEndPoint = new IPEndPoint(id, port);
        serverSocket.Bind(iPEndPoint);
    }

    public void Listener(int count = 0)
    {
        serverSocket.Listen(count);
        ServerAccept();
    }

    private void ServerAccept()
    {
        serverSocket.BeginAccept(AcceptCallBack, null);
    }

    private void AcceptCallBack(IAsyncResult ar)
    {
        Socket clientSocket = serverSocket.EndAccept(ar);
        Console.WriteLine("client is connect!!!");
        string tmpStr = "server is connect!!!";
        byte[] tmpBytes = Encoding.UTF8.GetBytes(tmpStr);
        clientSocket.Send(tmpBytes);
        AddSocket(clientSocket);
        serverSocket.BeginAccept(AcceptCallBack, null);
    }

    private void AddSocket(Socket socket)
    {
        ClientSocket cs;
        cs = new ClientSocket(socket, RemoveSocket, BroadCast);
        cs.Receive();
        clientSockets.Add(cs);
        Console.WriteLine(++index);
    }

    public void RemoveSocket(ClientSocket cs)
    {
        clientSockets.Remove(cs);
    }

    public void BroadCast(string msg, ClientSocket clientSocket)
    {
        clientSockets.ForEach(cs => {
            if (cs != clientSocket)
                cs.ReturnClient(msg);
        });
    }

    ~Server()
    {
        serverSocket.Close();
    }

}
---
using System;
using System.Net.Sockets;
using System.Text;

public class ClientSocket
{
    SocketFlags sf;
    public Socket clientSocket;
    public string name;
    public byte[] buffer;
    public RemoveCallBack cb;
    public BroadCastCallBack bc;

    public ClientSocket(Socket socket, RemoveCallBack cb, BroadCastCallBack bc)
    {
        clientSocket = socket;
        buffer = new byte[1024];
        this.cb = cb;
        this.bc = bc;
    }

    public void Receive()
    {
        sf = SocketFlags.None;
        clientSocket.BeginReceive(buffer, 0, buffer.Length, sf, ReceiveCallBack, null);
    }

    private void ReceiveCallBack(IAsyncResult ar)
    {
        try
        {
            int count = clientSocket.EndReceive(ar);
            if(count == 0)
            {
                clientSocket.Close();
                return;
            }
            string str = Encoding.UTF8.GetString(buffer, 0, count);

            if (string.IsNullOrEmpty(name))
            {
                name = str;
            }
            else
            {
                string strComplete = name + ":" + str;
                Console.WriteLine(strComplete);
                bc(strComplete, this);
            }
            clientSocket.BeginReceive(buffer, 0, buffer.Length, sf, ReceiveCallBack, null);

        }
        catch
        {
            Console.WriteLine(name + "is disconnect!!!");
            cb(this);
            clientSocket.Close();
        }
    }

    public void ReturnClient(string msg)
    {
        clientSocket.Send(Encoding.UTF8.GetBytes(msg));
    }


}

客户端

using System;

class Launch
{
    static void Main(string[] args)
    {
        Client client = new Client("192.168.1.157", 8000);
        client.InitClient();
        client.ClientConnect();
        while (true)
        {
            string str = Console.ReadLine();
            if (str == "c")
            {
                client.Close();
                break;
            }
            client.SendMsg(str);
        }
    }
}


---
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;

class Client
{
    SocketFlags sf;
    Socket clientSocket;
    IPEndPoint IPEndPoint;
    IPAddress id;
    string ip;
    int port;
    byte[] buffer = new byte[1024];

    public Client(string ip, int port)
    {
        this.ip = ip;
        this.port = port;
    }

    public void InitClient()
    {
        AddressFamily af = AddressFamily.InterNetwork;
        SocketType st = SocketType.Stream;
        ProtocolType pt = ProtocolType.Tcp;
        clientSocket = new Socket(af, st, pt);
    }

    public void ClientConnect()
    {
        if(string.IsNullOrEmpty(ip) || port == default(int))
        {
            Console.WriteLine("clientServer bind ip or port Error");
            return;
        }
        id = IPAddress.Parse(ip);
        IPEndPoint = new IPEndPoint(id, port);
        clientSocket.BeginConnect(IPEndPoint, ConnectCallBack, null);
    }

    private void ConnectCallBack(IAsyncResult ar)
    {
        try
        {
            clientSocket.EndConnect(ar);
        }
        catch
        {
            Console.WriteLine("client connect is error");
        }

        try
        {
            sf = SocketFlags.None;
            clientSocket.BeginReceive(buffer, 0, buffer.Length, sf, ReceiveCallBack, null);
        }
        catch
        {
            Console.WriteLine("client beginReceive is error!!!");
        }
    }

    private void ReceiveCallBack(IAsyncResult ar)
    {
        try
        {
            int count = clientSocket.EndReceive(ar);
            string msg = Encoding.UTF8.GetString(buffer, 0, count);
            Console.WriteLine(msg);
            clientSocket.BeginReceive(buffer, 0, buffer.Length, sf, ReceiveCallBack, null);
        }
        catch
        {
            Console.WriteLine("client endreceive is error!!!!");
        }
    }

    public void SendMsg(string str)
    {
        clientSocket.Send(Encoding.UTF8.GetBytes(str));
    }

    public void Close()
    {
        clientSocket.Close();
    }
}
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值