查看: 1171|回复: 0
打印 上一主题 下一主题

[其他] Socket服务端 与客户端聊天 实现

[复制链接]

9903

主题

126

听众

7万

积分

首席设计师

Rank: 8Rank: 8

纳金币
53488
精华
316

最佳新人 热心会员 灌水之王 活跃会员 突出贡献 荣誉管理 论坛元老

跳转到指定楼层
楼主
发表于 2015-5-28 01:35:01 |只看该作者 |倒序浏览
服务器端:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Net;
  7. using System.Net.Sockets;
  8. namespace ConsoleApplication1
  9. {
  10.     class Program
  11.     {
  12.         static void Main(string[] args)
  13.         {
  14.          

  15.             Console.WriteLine("server:192.168.104.98");//192.168.104.98是我自己主机的ip地址

  16.             //创建服务器socket实例  基于Tcp   以字节流传输*
  17.             Socket socket_sever = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  18.             IPAddress[] ipds = Dns.GetHostAddresses(Dns.GetHostName());
  19.             //给定服务器Ip和端口
  20.             IPEndPoint ipEndPoint = new IPEndPoint(ipds[1], 2222);
  21.             //绑定ip地址和端口号
  22.             socket_sever.Bind(ipEndPoint);
  23.             //开始监听  *
  24.             socket_sever.Listen(40);
  25.             while (true)
  26.             {
  27.                 byte[] data = new byte[1024];//用于缓存客户端发来的数据,以字节数组存储
  28.                 Console.WriteLine("等待客户端连接");
  29.                 //连接*
  30.                 Socket client = socket_sever.Accept();//开启一个新的 socket用于和客户端通信
  31.                 IPEndPoint clientPoint = (IPEndPoint)client.RemoteEndPoint;//获取到客户端的ip 和端口
  32.                 Console.WriteLine("connect with client:" + clientPoint.Address + "port" + clientPoint.Port);
  33.                 string server_msg = "welcome here";
  34.                 data = Encoding.ASCII.GetBytes(server_msg); //将字符串转化为字节数组

  35.                 client.Send(data, data.Length, SocketFlags.None);

  36.                 while (true)
  37.                 {
  38.                     //使用循环获取客户端的数据

  39.                     //收消息*
  40.                     data = new byte[1024];
  41.                     string client_meg = "";//记录传输客户端传过来的数据
  42.                     int lenght = client.Receive(data);//把客户端发过来的数据读出来
  43.                     client_meg = Encoding.ASCII.GetString(data, 0, lenght);
  44.                     if (client_meg == "exit")
  45.                     {
  46.                         break;
  47.                     }
  48.                     Console.WriteLine("client_mg:" + client_meg);

  49.                     //发消息
  50.                     Console.WriteLine("请示入:");
  51.                     server_msg = Console.ReadLine();
  52.                     data = Encoding.ASCII.GetBytes(server_msg);
  53.                     client.Send(data, data.Length, SocketFlags.None);//将消息发给客户端
  54.                 }
  55.                 Console.WriteLine(clientPoint.Address + "已经断开连接");
  56.                 client.Close();//关闭连接
  57.             }
  58.             socket_sever.Close();//关闭socket服务
  59.         }
  60.     }
  61. }
复制代码
客户端:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Net;
  7. using System.Net.Sockets;
  8. namespace ConsoleApplication1
  9. {
  10.     class Program
  11.     {
  12.         static void Main(string[] args)
  13.         {
  14.             //创建一个socket实例*
  15.             Socket socket_client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  16.             //指定服务器ip
  17.             string ipstr = "192.168.105.240";
  18.             IPAddress ipaddress = IPAddress.Parse(ipStr);//将字符串转为ip地址
  19.             IPEndPoint ipEndPoint = new IPEndPoint(ipaddress, 2222);//指定ip和端口号
  20.             //连接服务器*
  21.             socket_client.Connect(ipEndPoint);

  22.             byte[] data;
  23.             int lenght = 0;
  24.            string server_msg="";
  25.             while (true)
  26.             {
  27.                 //接收
  28.                 data = new byte[1024];
  29.                 //会处于等待消息状态*
  30.                 lenght = socket_client.Receive(data); ;//接受服务器的消息
  31.                 server_msg = Encoding.ASCII.GetString(data, 0, lenght);//将数据流转化为字符串
  32.                 Console.WriteLine("server:" + server_msg);

  33.                 //发送
  34.                 Console.WriteLine("请输入:");
  35.                 string input = Console.ReadLine();
  36.                 if (input=="exit")
  37.                 {
  38.                     socket_client.Send(Encoding.ASCII.GetBytes(input));
  39.                     break;
  40.                 }
  41.                 //发送*
  42.                     socket_client.Send(Encoding.ASCII.GetBytes(input));
  43.             }
  44.             Console .WriteLine ("已经断开连接");
  45.             socket_client.Shutdown(SocketShutdown.Both );//将连接断掉
  46.             socket_client .Close ();//关闭socket

  47.         }


  48.     }
  49. }
复制代码
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2025-8-20 04:59 , Processed in 0.062484 second(s), 28 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部