最近公司让我搞个socket小程序(服务端)。

主要的功能:客户端发字符串到服务端,服务端接收后在界面上显示。

参照了网上许多代码,自己从中修改整理代码。

  1. public Form4()
  2. {
  3. InitializeComponent();
  4. this.Width = ;
  5. this.Height = ;
  6. this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
  7. this.WindowState = FormWindowState.Maximized;
  8. System.Timers.Timer timer = new System.Timers.Timer();
  9. timer.Enabled = true;
  10. timer.Interval = ;//执行间隔时间,单位为毫秒
  11. timer.Start();
  12. timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
  13. //设置IP和端口
  14. SetServerIPAndPort();
  15.  
  16. }
  17. /// <summary>
  18. /// 根据当前程序目录的文本文件‘ServerIPAndPort.txt’内容来设定IP和端口
  19. /// 格式:127.0.0.1:8885
  20. /// </summary>
  21. private void SetServerIPAndPort()
  22. {
  23. try
  24. {
  25.  
  26. FileStream fs = new FileStream("ServerIPAndPort.txt", FileMode.Open);
  27. StreamReader sr = new StreamReader(fs);
  28. string IPAndPort = sr.ReadLine();
  29.  
  30. ServerIP = IPAndPort.Split(':')[]; //设定IP
  31. //ServerIP = GetLocalIPAddress();//设定IP
  32. port = int.Parse(IPAndPort.Split(':')[]); //设定端口
  33. Timer_out = int.Parse(IPAndPort.Split(':')[]);//设定连接超时时间(毫秒)
  34. ipEnd = new IPEndPoint(IPAddress.Parse(ServerIP), port);
  35. //定义套接字类型
  36. serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  37. //连接
  38. serverSocket.Bind(ipEnd);
  39. //开始侦听
  40. serverSocket.Listen();
  41. //AddItemToListBox(string.Format("开始在{0}监听连接", ServerIP, port));
  42. Thread myThread = new Thread(ListenClientConnect);
  43. myThread.Start();
  44. sr.Close();
  45. fs.Close();
  46. }
  47. catch (Exception ex)
  48. {
  49. MessageBox.Show("配置IP与端口失败,错误原因:" + ex.Message);
  50. Application.Exit();
  51. }
  52. }
  53. /// <summary>
  54. /// 监听客户端连接
  55. /// </summary>
  56. private void ListenClientConnect()
  57. {
  58. Socket clientSocket = null;
  59. while (true)
  60. {
  61. try
  62. {
  63. clientSocket = serverSocket.Accept();
  64. }
  65. catch {
  66. //当单击‘停止监听’或者退出此窗体时 AcceptTcpClient() 会产生异常
  67. //因此可以利用此异常退出循环
  68. break;
  69. }
  70. //clientSocket.Send(Encoding.ASCII.GetBytes("Server Say Hello"));
  71. Thread receiveThread = new Thread(ReceiveMessage);
  72. receiveThread.Start(clientSocket);
  73. }
  74. }
  75. /// <summary>
  76. /// 接收数据
  77. /// </summary>
  78. /// <param name="socket"></param>
  79. /// <param name="timeout"></param>
  80. /// <returns></returns>
  81. private string Receive(Socket socket)
  82. {
  83.  
  84. string result = string.Empty;
  85. //socket.ReceiveTimeout = Timer_out * 1000 * 60;
  86. List<byte> data = new List<byte>();
  87. byte[] buffer = new byte[];
  88. int length = ;
  89. try
  90. {
  91. while ((length = socket.Receive(buffer)) > )
  92. {
  93. for (int j = ; j < length; j++)
  94. {
  95. data.Add(buffer[j]);
  96. }
  97. if (length < buffer.Length)
  98. {
  99. break;
  100. }
  101. }
  102. }
  103. catch { }
  104. if (data.Count > )
  105. {
  106. result = Encoding.Default.GetString(data.ToArray(), , data.Count);
  107. }
  108. return result;
  109. }
  110. /// <summary>
  111. /// 接收消息
  112. /// </summary>
  113. /// <param name="clientSocket"></param>
  114. private void ReceiveMessage(object clientSocket)
  115. {
  116. flg = true;
  117. myClientSocket = (Socket)clientSocket;
  118. byte[] result = new byte[];
  119. while (flg)
  120. {
  121. try
  122. {
  123. //通过clientSocket接收数据
  124. //int receiveNumber = myClientSocket.Receive(result,result.Length,0);
  125. //AddItemToListBox(Encoding.Unicode.GetString(result, 0, receiveNumber));
  126. AddItemToListBox(Receive(myClientSocket));
  127. flg = false;
  128. //break;
  129. }
  130. catch (Exception ex)
  131. {
  132. AddItemToListBox(ex.Message);
  133. myClientSocket.Shutdown(SocketShutdown.Both);
  134. myClientSocket.Close();
  135. break;
  136. }
  137. }
  138. }

C#——Socket的更多相关文章

  1. socket读写返回值的处理

    在调用socket读写函数read(),write()时,都会有返回值.如果没有正确处理返回值,就可能引入一些问题 总结了以下几点 1当read()或者write()函数返回值大于0时,表示实际从缓冲 ...

  2. Socket聊天程序——Common

    写在前面: 上一篇记录了Socket聊天程序的客户端设计,为了记录的完整性,这里还是将Socket聊天的最后一个模块--Common模块记录一下.Common的设计如下: 功能说明: Common模块 ...

  3. Socket聊天程序——客户端

    写在前面: 上周末抽点时间把自己写的一个简单Socket聊天程序的初始设计和服务端细化设计记录了一下,周二终于等来毕业前考的软考证书,然后接下来就是在加班的日子度过了,今天正好周五,打算把客户端的详细 ...

  4. Socket聊天程序——服务端

    写在前面: 昨天在博客记录自己抽空写的一个Socket聊天程序的初始设计,那是这个程序的整体设计,为了完整性,今天把服务端的设计细化记录一下,首页贴出Socket聊天程序的服务端大体设计图,如下图: ...

  5. Socket聊天程序——初始设计

    写在前面: 可能是临近期末了,各种课程设计接踵而来,最近在csdn上看到2个一样问答(问题A,问题B),那就是编写一个基于socket的聊天程序,正好最近刚用socket做了一些事,出于兴趣,自己抽了 ...

  6. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  7. Android Socket连接PC出错问题及解决

    最近测试问题:Android 通过Socket链接电脑,ip和端口都是正确的,也在同一网段,可android端就是报异常如下: 解决办法:测试电脑的防火墙可能开着,在控制面板把防火墙打开即可.

  8. Linux下的C Socket编程 -- server端的继续研究

    Linux下的C Socket编程(四) 延长server的生命周期 在前面的一个个例子中,server在处理完一个连接后便会立即结束掉自己,然而这种server并不科学啊,server应该是能够一直 ...

  9. Mono 3.2.3 Socket功能迎来一稳定的版本

    由于兴趣自己业余时间一直在搞.net下面的通讯应用,mono的存在得以让.NET程序轻松运行在Linux之下.不过经过多尝试Socket相关功能在Mono下的表现并不理想.不管性能还是吞吐能力方面离我 ...

  10. Demo源码放送:打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!

    随着HTML5 WebSocket技术的日益成熟与普及,我们可以借助WebSocket来更加方便地打通BS与CS -- 因为B/S中的WebSocket可以直接连接到C/S的服务端,并进行双向通信.如 ...

随机推荐

  1. Codeforces Round #474-B(贪心)

    一.题目链接 http://codeforces.com/contest/960/problem/B 二.题意 给定三个数字$N, k1, k2$,接下来给出两组数$a[]$和$b[]$,每组数$N$ ...

  2. c#中的可选参数和命名参数的使用

    C#4.0之后出现了一个可选参数这个特性. class Cal { static void Main(string[] args) { test1 t = new test1(); t.Add(, ) ...

  3. 熟悉下apple 马甲包

    一.什么是马甲包 马甲包是利用App store 规则漏洞,通过技术手段,多次上架同一款产品的方法.马甲包和主产品包拥有同样的内容和功能,除了icon和应用名称不能完全一致,其他基本一致. 二.为什么 ...

  4. sonar link 的安装与使用

    参考来源:https://jingyan.baidu.com/article/2a1383289bea98074a134ff6.html 工具/原料   版本要求Eclipse(4.2,3.8)以上, ...

  5. Eclipse去掉对jQuery的错误提示

    1.I have found that I can leave the JavaScript Validator enable and ignore specific files by adding ...

  6. (转存)面向切面编程(AOP)的理解

    面向切面编程(AOP)的理解 标签: aop编程 2010-06-14 20:17 45894人阅读 评论(11) 收藏 举报  分类: Spring(9)  在传统的编写业务逻辑处理代码时,我们通常 ...

  7. [ShaderStaff] 圆角矩形效果实现

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Unity2017.3 | Shader 最近在制作一款APP,其中需要对矩形图片资源的展现进行圆角化,看了一下网上的方案 ...

  8. Sqlserver filestream 引发文件数剧增

    如果不使用checkpoint,文件数会剧增 参考:https://docs.microsoft.com/zh-cn/sql/relational-databases/logs/database-ch ...

  9. Linux学习---linux系统下安装配置Jenkins

    1.首先准备java环境,安装JDK 2.下载jenkins至Linux服务器 下载地址:https://wiki.jenkins-ci.org/display/JENKINS/Installing+ ...

  10. Spring AOP底层原理

    ------------------siwuxie095                                 Spring AOP 底层原理         AOP 即 Aspect Or ...