苦瓜3

博客园 首页 新随笔 联系 订阅 管理

------服务端代码

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.Threading;

namespace Socket聊天功能服务端
{
    class Program
    {
        static void Main(string[] args)
        {
            //1:创建Socket 
            Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream
                , ProtocolType.Tcp);
            //2:给Socket绑定IP
                // 1) 创建一个IPAddress 
            IPAddress iPAddress = IPAddress.Loopback;
                // 2) 创建一个IPEndPoint 
            IPEndPoint iPEndPoint = new IPEndPoint(iPAddress, 8088);

            serverSocket.Bind(iPEndPoint);
            //2:启动socket监听
            serverSocket.Listen(10);
            Console.WriteLine("服务端启动监听{0}成功", serverSocket.LocalEndPoint.ToString());

            //3:当有客户端请求连接时,创建连接
            Thread myThread = new Thread(ListenClientConnect);
            myThread.Start(serverSocket);
        }

        /// <summary>
        /// 接收客户端的连接
        /// </summary>
        /// <param name="_serverSocket"></param>
        public static void ListenClientConnect(object _serverSocket) {
            while (true)
            {
                Socket serverSocket = _serverSocket as Socket;
                //运行到Accept()方法是会阻塞程序(同步Socket),
                Socket clientSocket = serverSocket.Accept();//此时 clientSocket 已经有了数据
                //创建一个接受客户端发送消息的线程
                Thread reciveThread = new Thread(ReciveAndSendMessage);
                reciveThread.Start(clientSocket);
            }
        
        }
        /// <summary>
        /// 服务端收到数据做事情
        /// </summary>
        /// <param name="_clientSocket"></param>
        public static void ReciveAndSendMessage(object _clientSocket)
        {

            if (_clientSocket != null)
            {
                Socket clientSocket = _clientSocket as Socket;

                while (true)
                {
                    try
                    {
                        byte[] m_DataBuffer = new byte[1024];
                        int reciverNumber = clientSocket.Receive(m_DataBuffer);
                        string receivedMessage = Encoding.UTF8.GetString(m_DataBuffer, 0, reciverNumber);
                        Console.WriteLine("客户端的{0}说:\"{1}\"", clientSocket.RemoteEndPoint.ToString(),
                            receivedMessage);

                        Console.WriteLine("请输入要发送的内容:");
                        string sendMsg = Console.ReadLine();
                        //将数据发给客户端
                        clientSocket.Send(Encoding.UTF8.GetBytes( sendMsg));

                    }
                    catch (Exception ex)
                    {
                        Console.Write(ex.Message);
                        clientSocket.Shutdown(SocketShutdown.Both);
                        clientSocket.Close();
                        break;
                    }
                }
            }
        }


    }
}

 

------客户端代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;

namespace Socket聊天功能客户端
{
    class Program
    {
        static void Main(string[] args)
        {
            //1 创建socket
            Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //2 服务端的IPendpoint
            IPAddress ip = IPAddress.Loopback;
            IPEndPoint iep = new IPEndPoint(ip, 8088);
            //3 和服务端进行连接
            try
            {
                clientSocket.Connect(iep);
            }
            catch (Exception ex)
            {

                throw ex;
            }
            //发送信息到服务端和读取服务端发出的信息
            while (true)
            {
                // 1)发送信息到服务端
                Console.WriteLine("请输入你要发送的内容:");
                string sendMessage = Console.ReadLine();
                clientSocket.Send(Encoding.UTF8.GetBytes(sendMessage));//发送消息到服务端
                // 2)从服务端接受消息
                byte[] receiveByte = new byte[1024];
                int receiveLength = clientSocket.Receive(receiveByte);
                string receiveMessage = Encoding.UTF8.GetString(receiveByte, 0, receiveLength);
                Console.WriteLine("服务端说:\"{0}", receiveMessage + "\"");
            }
        }
    }
}

-----------------------------------------总结------------------------------

简单的来说

服务端:

1:创建服务端的socket 并启动监听

2:可以接收客户端的数据.也可发送数据到服务端

客户端:

1:创建客户端的socket 并和服务端进行连接(需指定连哪个服务端)

2:接受服务端的数据.也可发送数据到服务端

 

posted on 2013-07-14 16:55  苦瓜3  阅读(124)  评论(0编辑  收藏  举报