服务端

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 using System.Net.Sockets;
 5 using System.Net;
 6 using System.Threading;
 7 
 8 namespace Controller
 9 {
     public static class SocketServer
     {
         private static byte[] result = new byte[];
         private static int myProt = ;   //端口
         private static Socket serverSocket;
         private static List<Socket> clientSockets=new List<Socket>();
         public static void Init()
         {
             //服务器IP地址
             IPAddress ip = IPAddress.Parse("127.0.0.1");
             serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
             serverSocket.Bind(new IPEndPoint(ip, myProt));  //绑定IP地址:端口
             serverSocket.Listen();    //设定最多10个排队连接请求
             Console.WriteLine("启动监听{0}成功", serverSocket.LocalEndPoint.ToString());
             //通过Clientsoket发送数据
             Thread myThread = new Thread(ListenClientConnect);
             myThread.Start();
             Console.ReadLine();
         }
 
         /// <summary>
         /// 监听客户端连接
         /// </summary>
         private static void ListenClientConnect()
         {
             while (true)
             {
                 Socket clientSocket = serverSocket.Accept();
                 clientSockets.Add(clientSocket);
                 Thread receiveThread = new Thread(ReceiveMessage);
                 receiveThread.Start(clientSocket);
             }
         }
 
         /// <summary>
         /// 接收消息
         /// </summary>
         /// <param name="clientSocket"></param>
         private static void ReceiveMessage(object clientSocket)
         {
             Socket myClientSocket = (Socket)clientSocket;
             while (true)
             {
                 try
                 {
                     //通过clientSocket接收数据
                     int receiveNumber = myClientSocket.Receive(result);
                     string strContent = Encoding.ASCII.GetString(result, , receiveNumber);
                     Console.WriteLine("接收客户端{0}消息{1}", myClientSocket.RemoteEndPoint.ToString(), Encoding.ASCII.GetString(result, , receiveNumber));
                 }
                 catch (Exception ex)
                 {
                     Console.WriteLine(ex.Message);
                     myClientSocket.Shutdown(SocketShutdown.Both);
                     myClientSocket.Close();
                     break;
                 }
             }
         }
 
         public static void SendMessage(string message)
         {
             foreach(Socket clientSocket in clientSockets)
                 clientSocket.Send(Encoding.ASCII.GetBytes(message));
         }
     }
 }

客户端

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 using System.Net.Sockets;
 5 using System.Net;
 6 using System.Threading;
 7 
 8 namespace Player
 9 {
     public static class SocketClient
     {
         private static Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
         private static byte[] result = new byte[];
         public static void Init()
         {
             //设定服务器IP地址
             IPAddress ip = IPAddress.Parse("127.0.0.1");            
             try
             {
                 clientSocket.Connect(new IPEndPoint(ip, )); //配置服务器IP与端口
                 Console.WriteLine("连接服务器成功");
             }
             catch
             {
                 Console.WriteLine("连接服务器失败,请按回车键退出!");
                 return;
             }
 
             Thread receiveThread = new Thread(ReceiveMessage);
             receiveThread.Start();
             
         }
         /// <summary>
         /// 接收消息
         /// </summary>
         /// <param name="clientSocket"></param>
         private static void ReceiveMessage()
         {            
             while (true)
             {
                 try
                 {
                     //通过clientSocket接收数据
                     int receiveNumber = clientSocket.Receive(result);
                     string strContent = Encoding.ASCII.GetString(result, , receiveNumber);
                     Console.WriteLine("接收服务端{0}消息{1}", clientSocket.RemoteEndPoint.ToString(), Encoding.ASCII.GetString(result, , receiveNumber));
                 }
                 catch (Exception ex)
                 {
                     Console.WriteLine(ex.Message);
                     clientSocket.Shutdown(SocketShutdown.Both);
                     clientSocket.Close();
                     break;
                 }
             }
         }
         public static void SendMessage(string message)
         {
             string sendMessage = message;
             clientSocket.Send(Encoding.ASCII.GetBytes(sendMessage));
         }
     }
 }

C# Socket服务端和客户端互相send和receive的更多相关文章

  1. C# Socket服务端与客户端通信(包含大文件的断点传输)

    步骤: 一.服务端的建立 1.服务端的项目建立以及页面布局 2.各功能按键的事件代码 1)传输类型说明以及全局变量 2)Socket通信服务端具体步骤:   (1)建立一个Socket   (2)接收 ...

  2. Python3学习之路~8.3 socket 服务端与客户端

    通过8.2的实例1-6,我们可以总结出来,socket的服务端和客户端的一般建立步骤: 服务端 步骤:1创建实例,2绑定,3监听,4阻塞,5发送&接收数据,6关闭. #Author:Zheng ...

  3. PHP socket服务端与客户端的简易通信

    今天学习socket通信的同时,顺便整理了下以前初识socket的知识. 现在关于php的socket通信,有些框架已经十分成熟了,比如  swoole 和 workerman,这两个大家可以学习学习 ...

  4. socket系列之socket服务端与客户端如何通信

    上面已经分别介绍了ServerSocket跟Socket的工作步骤,并且从应用层往系统底层剖析其运作原理,我们清楚了他们各自的一块,现在我们将把他们结合起来,看看他们是如何通信的,并详细讨论一下他们之 ...

  5. Socket服务端和客户端文件传输

    很多朋友在使用socket编程时不可避免的都做过文件传输,而视频电影等需要一个字节一个字节的传输:但是客户端一般都通过-1进行终止,服务也一样:但是存在的问题是客户端永远不会把-1传递给服务端:因此经 ...

  6. golang的socket服务端与客户端

    服务端 服务端的处理流程 监听端口 接收客户端的链接 创建goroutine,处理该链接 package main import ( "fmt" "net" ) ...

  7. Socket服务端和客户端(C++,CodeBlocks+GCC编译)

    //main.cpp 1 #include "j_socket.h" #include <stdio.h> #include <pthread.h> ; j ...

  8. Android—Socket服务端与客户端用字符串的方式互相传递图片

    发送图片: 首先找到具体传递的图片: private Bitmap getimage(String srcPath) { BitmapFactory.Options newOpts = new Bit ...

  9. (C#:Socket)简单的服务端与客户端通信。

    要求:1.可以完成一对一的通信:2.实现服务端对客户端一对多的选择发送:3.可以实现服务端的群发功能:4.可以实现客户端文件的发送: 要点:服务器端:第一步:用指定的端口号和服务器的ip建立一个End ...

随机推荐

  1. Android自定义带标题边框的Layout

    今天工作中又碰到个小问题,项目需要用到像Java Swing的JPanel一样带标题边框的布局,Android里没有类似控件,想到这个也不难,自己画了一个,是继承LinearLayout的一个自定义布 ...

  2. PHP在Windows下安装配置第一步

    第一步就是下载和安装PHP解释器了: 1.下载Windows版本号的PHP解释器,下载地址:官方下载 我下载的是 VC11 x64 Thread Safe 这个以下的zip包 2.下载完毕后,解压到 ...

  3. unix系统非roo账号安装JDK

    AIX系统用户rusky(非root用户,没有权限修改/etc/profile和/etc/environment文件 )直接解压JDK.zip文件,解压后把JAVA目录拷贝到/home/rusky目录 ...

  4. 安装mysql时出错。无法初始化。 libstdc++.so.5

    ./bin/mysqld: error while loading shared libraries: libstdc++.so.5: cannot open shared object file: ...

  5. transform的2D部分,嗯…就这个标题了。

    上一次写了transition的内容,这次就写拼写很类似的另外一个属性transform好了……我英语差这件事就不要吐槽了,下面是正文,真的: transition是过渡,transform是变换. ...

  6. android中列表的滑动删除仿ios滑动删除

    大家是不是觉得ios列表的滑动删除效果很酷炫?不用羡慕android也可以实现相同的效果 并且可以自定义效果,比如左滑删除,置顶,收藏,分享等等 其实就是自定义listview重写listview方法 ...

  7. Java Junit4测试功能

    作为一个java新手,有些东西有必要记下来,以便以后方便查看. 为了让自己有养成良好的习惯,新建一个测试的文件夹:test在项目上右击→New→Folder.新建一个test文件夹. 接下来要在你需要 ...

  8. 如何让你的SQL运行得更快

    人们在使用SQL时往往会陷入一个误区,即太关注于所得的结果是否正确,而忽略了不同的实现方法之间可能存在的性能差异,这种性能差异在大型的或是复杂的数据库环境中(如联机事务处理OLTP或决策支持系统DSS ...

  9. [ofbiz]screen中应用form和ftl,控制页面元素属性

    可以在screen中定义form与ftl两个文件,ftl中可以使用js控制form中的页面元素属性. 控制元素是否可编辑:        $("#oaDataReport_budget&qu ...

  10. safari 在 iPad Portrait 模式默认设置980px宽度

    最近在做网站兼容性时发现 safari 在 iPad Portrait 模式,默认为html.body标签设置了980px宽度,导致页面被纵向截断,解决方法为在页面head区插入以下代码即可完美解决. ...