zoukankan      html  css  js  c++  java
  • TCP的代码

      视频已经发布,这里是所有的代码仅供参考.

      TCP服务器:

      MainWindow里面的代码:

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 using System.Windows;
      6 using System.Windows.Controls;
      7 using System.Windows.Data;
      8 using System.Windows.Documents;
      9 using System.Windows.Input;
     10 using System.Windows.Media;
     11 using System.Windows.Media.Imaging;
     12 using System.Windows.Navigation;
     13 using System.Windows.Shapes;
     14 using System.Net.Sockets;
     15 using System.Net;
     16 using System.IO;
     17 using System.Threading;
     18 
     19 namespace TCPServerExample
     20 {
     21     /// <summary>
     22     /// MainWindow.xaml 的交互逻辑
     23     /// </summary>
     24     public partial class MainWindow : Window
     25     {
     26         TcpListener myListener;
     27         List<User> userList = new List<User>();
     28         bool isExit;
     29         IPAddress ip;
     30         public MainWindow()
     31         {
     32             InitializeComponent();
     33             button1.IsEnabled = true;
     34             button2.IsEnabled = false;
     35         }
     36         //开始按钮
     37         private void button1_Click(object sender, RoutedEventArgs e)
     38         {
     39             button1.IsEnabled = false;
     40             button2.IsEnabled = true;
     41             isExit = true;
     42             //获取本机IP地址
     43             IPAddress[] ips = Dns.GetHostAddresses(Dns.GetHostName());
     44             foreach (var item in ips)
     45             {
     46                 if (item.AddressFamily==AddressFamily.InterNetwork)
     47                 {
     48                     ip = item;
     49                     break;
     50                 }
     51             }
     52 
     53 
     54             myListener = new TcpListener(ip, 51888);
     55             IPEndPoint iep = new IPEndPoint(ip, 51888);
     56             myListener.Start();
     57             //textBlock1.Text += string.Format("服务器在{0}的{1}打开监听",ips[5],port);
     58             textBlock1.Text += string.Format("服务器在{0}打开监听
    ", iep);
     59             Thread t1 = new Thread(ListenClientConnect);
     60             t1.Start();
     61         }
     62 
     63         //第一步,开启监听
     64         private void ListenClientConnect()
     65         {
     66             //获取相应客户端套接字
     67             while (isExit)
     68             {
     69                 try
     70                 {
     71                     TcpClient newClient = myListener.AcceptTcpClient();
     72                     User user = new User(newClient);
     73                     userList.Add(user);
     74                     Action act = delegate()
     75                     {
     76                         textBlock1.Text += string.Format("用户{0}连接成功,当前在线用户数为{1}
    ",
     77                             newClient.Client.RemoteEndPoint, userList.Count);
     78                     };
     79                     textBlock1.Dispatcher.Invoke(act);
     80                     Thread t2 = new Thread(ReceiveMessage);
     81                     t2.Start(user);
     82                 }
     83                 catch
     84                 {
     85                     break;
     86                 }
     87   
     88             }
     89         }
     90         //第二步,接收消息
     91         private void ReceiveMessage(Object user1)
     92         {
     93             User newuser = (User)user1;
     94             while (isExit)
     95             {
     96                 try
     97                 {
     98                     string message = newuser.br.ReadString();
     99                     AddMessage(string.Format("客户端:{0}发送信息:{1}
    ",
    100                             newuser.client.Client.RemoteEndPoint, message));
    101                    string[] array = message.Split(',');
    102                     switch (array[0])
    103                     {
    104                         case "Login":
    105                             {
    106                                 newuser.username = array[1];
    107                                 //服务器告诉所有在线客户端,有新的用户登录
    108                                 for (int i = 0; i < userList.Count; i++)
    109                                 {
    110                                     if (userList[i].username != newuser.username)
    111                                     {
    112                                         userList[i].bw.Write("Login," + array[1]);
    113                                     }
    114                                     newuser.bw.Write("Login," + userList[i].username);
    115                                 }
    116                                 break;
    117                             }
    118                         case "Logout":
    119                             {
    120                                 for (int i = 0; i < userList.Count; i++)
    121                                 {
    122                                     if (userList[i].username != newuser.username)
    123                                     {
    124                                         userList[i].bw.Write("Logout," + array[1]);
    125                                     }
    126                                 }
    127                                 userList.Remove(newuser);
    128                                 AddMessage("客户端" + newuser.username + "退出," + "当前用户数为:" + userList.Count);
    129                                 return;
    130                             }
    131                         case "Talk":
    132                             {
    133                                 string target = array[1];
    134                                 for (int i = 0; i < userList.Count; i++)
    135                                 {
    136                                     if (userList[i].username == target)
    137                                     {
    138                                         userList[i].bw.Write("Talk," + newuser.username + "," + array[2]);
    139                                     }
    140                                 }
    141                                 break;
    142                             }
    143                         default:
    144                             {
    145                                 MessageBox.Show("什么意思?");
    146                                 break;
    147                             }
    148                     }
    149                 }
    150                 catch
    151                 {
    152                     break;
    153                 }
    154             }
    155         }
    156         //第三步,添加消息到textBlock
    157         private void AddMessage(string message)
    158         {
    159             Action act = delegate()
    160             {
    161                 textBlock1.Text += message;
    162             };
    163             textBlock1.Dispatcher.Invoke(act);
    164         }
    165 
    166         //结束按钮
    167         private void button2_Click(object sender, RoutedEventArgs e)
    168         {
    169             button1.IsEnabled = true;
    170             button2.IsEnabled = false;
    171             for (int i = 0; i < userList.Count; i++)
    172             {
    173                 try
    174                 {
    175                     userList[i].bw.Write("服务器已停止监听!");
    176                 }
    177                 catch
    178                 {
    179                     break;
    180                 }
    181                 userList[i].Close();
    182             }
    183             isExit = false;
    184             Thread.Sleep(1000);
    185             myListener.Stop();
    186             
    187             for (int i = 0; i < userList.Count; i++)
    188             {
    189                 userList[i].Close();
    190             }
    191             textBlock1.Text += "监听结束!";
    192         }
    193     }
    194 }

      User类的代码:

      

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Net.Sockets;
     6 using System.IO;
     7 
     8 namespace TCPServerExample
     9 {
    10     class User
    11     {
    12         public string username{get;set;}
    13         public TcpClient client{get;set;}
    14         public BinaryWriter bw { get; set; }
    15         public BinaryReader br { get; set; }
    16         public User(TcpClient newclient)
    17         {
    18             this.client = newclient;
    19             NetworkStream networkstream = newclient.GetStream();
    20             bw = new BinaryWriter(networkstream);
    21             br = new BinaryReader(networkstream);
    22             
    23 
    24         }
    25 
    26         public void Close()
    27         {
    28             client.Close();
    29             bw.Close();
    30             br.Close();
    31 
    32         }
    33     }
    34 }

     

      TCP客户端:

      

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 using System.Windows;
      6 using System.Windows.Controls;
      7 using System.Windows.Data;
      8 using System.Windows.Documents;
      9 using System.Windows.Input;
     10 using System.Windows.Media;
     11 using System.Windows.Media.Imaging;
     12 using System.Windows.Navigation;
     13 using System.Windows.Shapes;
     14 using System.Net.Sockets;
     15 using System.Net;
     16 using System.IO;
     17 using System.Threading;
     18 
     19 namespace TCPClientExample
     20 {
     21     /// <summary>
     22     /// MainWindow.xaml 的交互逻辑
     23     /// </summary>
     24     public partial class MainWindow : Window
     25     {
     26         TcpClient newClient;
     27         BinaryWriter bw;
     28         BinaryReader br;
     29         string username;
     30         //enum item { listBox1, textBox1 };
     31         //enum opreation { add,remove};
     32         public MainWindow()
     33         {
     34             InitializeComponent();
     35         }
     36         private void button1_Click(object sender, RoutedEventArgs e)
     37         {
     38             button1.IsEnabled = false;
     39             username = textBox2.Text;
     40             //创建套接字(TcpClient对象)
     41             newClient = new TcpClient();  
     42             //获取服务器IP地址
     43             IPAddress ip = IPAddress.Parse("10.0.2.15");
     44             try
     45             {
     46                 newClient.Connect(ip, 51888);
     47                 listBox1.Items.Add("连接成功!");
     48             }
     49             catch
     50             {
     51                 listBox1.Items.Add("连接失败!");
     52                 button1.IsEnabled = true;
     53                 return;
     54             }
     55             NetworkStream networkStream = newClient.GetStream();
     56             bw = new BinaryWriter(networkStream);
     57             br = new BinaryReader(networkStream);
     58             bw.Write("Login," + username);
     59             Thread t1 = new Thread(ReceiveMessage); 
     60             t1.Start();
     61         }
     62         //第一步,接收消息
     63         private void ReceiveMessage()
     64         {
     65             string message = "";
     66             while (true)
     67             {
     68                 try
     69                 {
     70                     message = br.ReadString();
     71                 }
     72                 catch
     73                 {
     74                     break;
     75                 }
     76                 string[] array = message.Split(',');
     77                 switch (array[0])
     78                 {
     79                     case "Login":
     80                         AddUser(array[1]);
     81                         break;
     82                     case "Logout":
     83                         RemoveUser(array[1]);
     84                         break;
     85                     case "Talk":
     86                         AddMessage(array[1] + ":" + array[2]);
     87                         break;
     88                     default:
     89                         AddMessage(message);
     90                         break;
     91                 }
     92             }
     93         }
     94         //第二步,添加消息到textBlock
     95         private void AddMessage(string message)
     96         {
     97             Action act = delegate()
     98             {
     99                 listBox1.Items.Add(message);
    100             };
    101             listBox2.Dispatcher.Invoke(act);
    102         }
    103         //第三步,添加用户到列表
    104         private void AddUser(string name)
    105         {
    106             Action act = delegate()
    107             {
    108                 listBox2.Items.Add(name);
    109             };
    110             listBox2.Dispatcher.Invoke(act);
    111         }
    112         //第四步,移除用户
    113         private void RemoveUser(string name)
    114         {
    115             Action act = delegate()
    116             {
    117                 listBox2.Items.Remove(name);
    118             };
    119             listBox2.Dispatcher.Invoke(act);
    120         }
    121 
    122         private void button2_Click(object sender, RoutedEventArgs e)
    123         {
    124             NetworkStream networkStream = newClient.GetStream();
    125              bw = new BinaryWriter(networkStream);
    126             string message = textBox1.Text;
    127             bw.Write("Talk,"+listBox2.SelectedItem+","+message);
    128             listBox1.Items.Add(username + ":" + textBox1.Text);   
    129         }
    130         private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    131         {
    132             try
    133             {
    134                 bw.Write("Logout," + username);
    135             }
    136             catch
    137             {
    138                 MessageBox.Show("与服务器连接失败!");
    139             }
    140             bw.Close();
    141         }
    142     }
    143 }

      我这里的ip都是我自己电脑的ip,你们参考别忘了改ip

      我是蜀云泉,我爱许嵩.吼吼~

      

  • 相关阅读:
    Spring boot如何快速的配置多个Redis数据源
    SMProxy,让你的数据库操作快三倍!
    利用OpenJ9大幅度降低JAVA内存占用
    利用mitmproxy实现抖音Cookie,设备ID获取(一)
    结合AndServer,实现抖音X-Gorgon算法,设备id生成接口
    抖音APP登录分析,Cookie获取
    Spring Boot 最简单整合Shiro+JWT方式
    shiro使用步骤梳理
    梳理搭建SSM步骤
    SSM中保存数据出现415错误
  • 原文地址:https://www.cnblogs.com/yunquan/p/5618016.html
Copyright © 2011-2022 走看看