写的也很简单,自己觉得挺有意思了

程序如图

主要代码

  1. public class Message
  2. {
  3. Form1 mainfrom = null;
  4. public Message() { }
  5. public Message(Form1 form)
  6. {
  7. mainfrom = form;
  8. }
  9. public bool StartReceive(int port)
  10. {
  11. try
  12. {
  13. IPEndPoint iep = new IPEndPoint(IPAddress.Loopback, port);
  14. Socket tcpServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  15. tcpServer.Bind(iep);
  16. tcpServer.Listen();
  17. tcpServer.BeginAccept(new AsyncCallback(Accept), tcpServer);
  18. return true;
  19. }
  20. catch (Exception ex) { return false; }
  21. }
  22.  
  23. private void Accept(IAsyncResult ia)
  24. {
  25. Socket socket = ia.AsyncState as Socket;
  26. var client = socket.EndAccept(ia);
  27. byte[] buf = new byte[];
  28. socket.BeginAccept(new AsyncCallback(Accept), socket);
  29. StateObject state = new StateObject();
  30. state.workSocket = client;
  31. try
  32. {
  33. client.BeginReceive(state.buffer, , StateObject.BufferSize, SocketFlags.None, new AsyncCallback(Receive), state);
  34. }
  35. catch (Exception ex)
  36. {
  37. //Console.WriteLine("监听请求时出错:\r\n" + ex.ToString());
  38. }
  39. }
  40.  
  41. private void Receive(IAsyncResult ia)
  42. {
  43. StateObject state = ia.AsyncState as StateObject;
  44. if (state == null)
  45. {
  46. return;
  47. }
  48. Socket client = state.workSocket;
  49. if (client == null)
  50. {
  51. return;
  52. }
  53. try
  54. {
  55. int count = client.EndReceive(ia);
  56. if (count > )
  57. {
  58. try
  59. {
  60. client.BeginReceive(state.buffer, , StateObject.BufferSize, SocketFlags.None, new AsyncCallback(Receive), client);
  61. string context = Encoding.GetEncoding("gb2312").GetString(state.buffer, , count);
  62. //显示接收消息
  63. mainfrom.LoginFormTextChange(context);
  64. }
  65. catch (Exception ex)
  66. {
  67. //Console.WriteLine("接收的数据出错:\r\n{0}", ex.ToString());
  68. }
  69. }
  70. }
  71. catch (Exception err)
  72. {
  73.  
  74. }
  75. }
  76.  
  77. public void SendMessage(int port, string m)
  78. {
  79. System.Text.Encoding CharSet = System.Text.Encoding.GetEncoding("gb2312");
  80. Socket tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  81. try
  82. {
  83. tcpClient.Connect(IPAddress.Loopback, port);
  84. string sendmsg = m;
  85. byte[] buff = CharSet.GetBytes(sendmsg);
  86. tcpClient.Send(buff, buff.Length, );
  87. }
  88. catch (SocketException e)
  89. {
  90. }
  91. }
  92. }
  93.  
  94. public class StateObject
  95. {
  96. // Client socket.
  97. public Socket workSocket = null;
  98. // Size of receive buffer.
  99. public const int BufferSize = ;
  100. // Receive buffer.
  101. public byte[] buffer = new byte[BufferSize];
  102. // Received data string.
  103. public StringBuilder sb = new StringBuilder();
  104. }

源码 http://yun.baidu.com/s/1i39XtjR

利用Socket实现的两个程序的通信的更多相关文章

  1. python简单的监控脚本-利用socket、psutil阻止远程主机运行特定程序

    python简单的监控脚本-利用socket.psutil阻止远程主机运行特定程序 psutil是一个跨平台的库(http://code.google.com/p/psutil/),能够轻松的实现获取 ...

  2. 计算机网络|C语言Socket编程,实现两个程序间的通信

    C语言Socket编程,实现两个程序间的通信 server和client通信流程图 在mooc上找到的,使用Socket客户端client和服务端server通信的流程图

  3. python程序—利用socket监控端口

    利用socket监控服务器端口,端口不通时,发邮件提醒 import yagmail #导入yagmail模块 import re #导入re模块,进行正则匹配 import socket #导入so ...

  4. Socket编程指南及示例程序

    例子代码就在我的博客中,包括六个UDP和TCP发送接受的cpp文件,一个基于MFC的局域网聊天小工具工程,和此小工具的所有运行时库.资源和执行程序.代码的压缩包位置是http://www.blogja ...

  5. 洗礼灵魂,修炼python(86)--全栈项目实战篇(12)—— 利用socket实现文件传输/并发式聊天

    由于本篇博文的项目都很简单,所以本次开个特例,本次解析两个项目,但是都很简单的 项目一:用socket实现文件传输 本项目很简单,作为小项目的预热的,前面刚学完socket,这里马上又利用socket ...

  6. Socket编程指南及示例程序(转)

    1         前言 在一些常用的编程技术中,Socket网络编程可以说是最简单的一种.而且Socket编程需要的基础知识很少,适合初学者学习网络编程.目前支持网络传输的技术.语言和工具繁多,但是 ...

  7. 利用socket.io实现消息实时推送

    最近在写的项目中存在着社交模块,需要实现这样的一个功能:当发生了用户被点赞.评论.关注等操作时,需要由服务器向用户实时地推送一条消息.最终完成的项目地址为:socket-message-push,这里 ...

  8. 浅谈JAVA中如何利用socket进行网络编程(二)

    转自:http://developer.51cto.com/art/201106/268386.htm Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以 ...

  9. 浅谈JAVA中如何利用socket进行网络编程(一)

    转自:http://developer.51cto.com/art/201106/268385.htm Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以 ...

随机推荐

  1. Delphi窗体最大化按钮不可用情况下的最大化

    最大化按钮不可用,而且窗体最大化,我以前一直这样设置:在Object Inspector下把BorderIcons属性下的biMaximize属性设置为False,然后把WindowState属性设置 ...

  2. css案例学习之父子块的margin

    两边还会有些距离,这是body默认的. 代码: <head> <title>父子块的margin</title> <style type="text ...

  3. CC++初学者编程教程(10) 搭建Android java C/C++ NDK QTforAndroid 开发环境

    1 安装JDK 2 点下一步 3 点下一步 4 开始安装 5 定制路径,点下一步 6 开始安装 7 安装完成, 8 解压缩 9 启动eclipse 10 看到启动画面 11 设置工作文件夹 12 单击 ...

  4. SQL整理1 数据类型

    Character 字符串: 数据类型 描述 存储 char(n) 固定长度的字符串.最多 8,000 个字符. N的范围1-8000 varchar(n) 可变长度的字符串.最多 8,000 个字符 ...

  5. 基于jQuery实现的水平和垂直居中的div窗口

    在建立网页布局的时候,我们经常会面临一个问题,就是让一个div实现水平和垂直居中,虽然好几种方式实现,但是今天介绍时我最喜欢的方法,通过css和jQuery实现.   1.通过css实现水平居中: 复 ...

  6. asp.net 网站所有请求跳转到同一个页面

    应用场景:网站维护和未开发完成时,一般需要把所有请求都跳转的一个相关说明的页面,这样用户不至于困惑这个网站是不存在还是怎么了. Solution1:使用一个名称为 app_offline.htm(名字 ...

  7. TFS跨版本Merge测试

    原始文件Merge.txt Change Set Dev Beta #1 2014-9-25 10:49:13 ZDK 2014-9-25 10:49:13 ZDK #2 2014-9-25 10:4 ...

  8. Matlab基础知识

    一.常用命令:普通的如cd.ls和linux下一样 clc:清除工作窗口中的所有显示内容 clf:清除图形窗口 whos:列出当前工作空间中所有变量,以及它们的名字.尺寸(比如一个矩阵或数组的行列维数 ...

  9. Java程序执行Linux命令

    Java程序中要执行linux命令主要依赖2个类:Process和Runtime 首先看一下Process类: ProcessBuilder.start() 和 Runtime.exec 方法创建一个 ...

  10. HDU 2685 I won't tell you this is about number theory

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2685 题意:求gcd(a^m - 1, a^n - 1) mod k 思路:gcd(a^m - 1, ...