利用Socket实现的两个程序的通信
写的也很简单,自己觉得挺有意思了
程序如图
主要代码
- public class Message
- {
- Form1 mainfrom = null;
- public Message() { }
- public Message(Form1 form)
- {
- mainfrom = form;
- }
- public bool StartReceive(int port)
- {
- try
- {
- IPEndPoint iep = new IPEndPoint(IPAddress.Loopback, port);
- Socket tcpServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- tcpServer.Bind(iep);
- tcpServer.Listen();
- tcpServer.BeginAccept(new AsyncCallback(Accept), tcpServer);
- return true;
- }
- catch (Exception ex) { return false; }
- }
- private void Accept(IAsyncResult ia)
- {
- Socket socket = ia.AsyncState as Socket;
- var client = socket.EndAccept(ia);
- byte[] buf = new byte[];
- socket.BeginAccept(new AsyncCallback(Accept), socket);
- StateObject state = new StateObject();
- state.workSocket = client;
- try
- {
- client.BeginReceive(state.buffer, , StateObject.BufferSize, SocketFlags.None, new AsyncCallback(Receive), state);
- }
- catch (Exception ex)
- {
- //Console.WriteLine("监听请求时出错:\r\n" + ex.ToString());
- }
- }
- private void Receive(IAsyncResult ia)
- {
- StateObject state = ia.AsyncState as StateObject;
- if (state == null)
- {
- return;
- }
- Socket client = state.workSocket;
- if (client == null)
- {
- return;
- }
- try
- {
- int count = client.EndReceive(ia);
- if (count > )
- {
- try
- {
- client.BeginReceive(state.buffer, , StateObject.BufferSize, SocketFlags.None, new AsyncCallback(Receive), client);
- string context = Encoding.GetEncoding("gb2312").GetString(state.buffer, , count);
- //显示接收消息
- mainfrom.LoginFormTextChange(context);
- }
- catch (Exception ex)
- {
- //Console.WriteLine("接收的数据出错:\r\n{0}", ex.ToString());
- }
- }
- }
- catch (Exception err)
- {
- }
- }
- public void SendMessage(int port, string m)
- {
- System.Text.Encoding CharSet = System.Text.Encoding.GetEncoding("gb2312");
- Socket tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- try
- {
- tcpClient.Connect(IPAddress.Loopback, port);
- string sendmsg = m;
- byte[] buff = CharSet.GetBytes(sendmsg);
- tcpClient.Send(buff, buff.Length, );
- }
- catch (SocketException e)
- {
- }
- }
- }
- public class StateObject
- {
- // Client socket.
- public Socket workSocket = null;
- // Size of receive buffer.
- public const int BufferSize = ;
- // Receive buffer.
- public byte[] buffer = new byte[BufferSize];
- // Received data string.
- public StringBuilder sb = new StringBuilder();
- }
源码 http://yun.baidu.com/s/1i39XtjR
利用Socket实现的两个程序的通信的更多相关文章
- python简单的监控脚本-利用socket、psutil阻止远程主机运行特定程序
python简单的监控脚本-利用socket.psutil阻止远程主机运行特定程序 psutil是一个跨平台的库(http://code.google.com/p/psutil/),能够轻松的实现获取 ...
- 计算机网络|C语言Socket编程,实现两个程序间的通信
C语言Socket编程,实现两个程序间的通信 server和client通信流程图 在mooc上找到的,使用Socket客户端client和服务端server通信的流程图
- python程序—利用socket监控端口
利用socket监控服务器端口,端口不通时,发邮件提醒 import yagmail #导入yagmail模块 import re #导入re模块,进行正则匹配 import socket #导入so ...
- Socket编程指南及示例程序
例子代码就在我的博客中,包括六个UDP和TCP发送接受的cpp文件,一个基于MFC的局域网聊天小工具工程,和此小工具的所有运行时库.资源和执行程序.代码的压缩包位置是http://www.blogja ...
- 洗礼灵魂,修炼python(86)--全栈项目实战篇(12)—— 利用socket实现文件传输/并发式聊天
由于本篇博文的项目都很简单,所以本次开个特例,本次解析两个项目,但是都很简单的 项目一:用socket实现文件传输 本项目很简单,作为小项目的预热的,前面刚学完socket,这里马上又利用socket ...
- Socket编程指南及示例程序(转)
1 前言 在一些常用的编程技术中,Socket网络编程可以说是最简单的一种.而且Socket编程需要的基础知识很少,适合初学者学习网络编程.目前支持网络传输的技术.语言和工具繁多,但是 ...
- 利用socket.io实现消息实时推送
最近在写的项目中存在着社交模块,需要实现这样的一个功能:当发生了用户被点赞.评论.关注等操作时,需要由服务器向用户实时地推送一条消息.最终完成的项目地址为:socket-message-push,这里 ...
- 浅谈JAVA中如何利用socket进行网络编程(二)
转自:http://developer.51cto.com/art/201106/268386.htm Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以 ...
- 浅谈JAVA中如何利用socket进行网络编程(一)
转自:http://developer.51cto.com/art/201106/268385.htm Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以 ...
随机推荐
- Delphi窗体最大化按钮不可用情况下的最大化
最大化按钮不可用,而且窗体最大化,我以前一直这样设置:在Object Inspector下把BorderIcons属性下的biMaximize属性设置为False,然后把WindowState属性设置 ...
- css案例学习之父子块的margin
两边还会有些距离,这是body默认的. 代码: <head> <title>父子块的margin</title> <style type="text ...
- CC++初学者编程教程(10) 搭建Android java C/C++ NDK QTforAndroid 开发环境
1 安装JDK 2 点下一步 3 点下一步 4 开始安装 5 定制路径,点下一步 6 开始安装 7 安装完成, 8 解压缩 9 启动eclipse 10 看到启动画面 11 设置工作文件夹 12 单击 ...
- SQL整理1 数据类型
Character 字符串: 数据类型 描述 存储 char(n) 固定长度的字符串.最多 8,000 个字符. N的范围1-8000 varchar(n) 可变长度的字符串.最多 8,000 个字符 ...
- 基于jQuery实现的水平和垂直居中的div窗口
在建立网页布局的时候,我们经常会面临一个问题,就是让一个div实现水平和垂直居中,虽然好几种方式实现,但是今天介绍时我最喜欢的方法,通过css和jQuery实现. 1.通过css实现水平居中: 复 ...
- asp.net 网站所有请求跳转到同一个页面
应用场景:网站维护和未开发完成时,一般需要把所有请求都跳转的一个相关说明的页面,这样用户不至于困惑这个网站是不存在还是怎么了. Solution1:使用一个名称为 app_offline.htm(名字 ...
- 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 ...
- Matlab基础知识
一.常用命令:普通的如cd.ls和linux下一样 clc:清除工作窗口中的所有显示内容 clf:清除图形窗口 whos:列出当前工作空间中所有变量,以及它们的名字.尺寸(比如一个矩阵或数组的行列维数 ...
- Java程序执行Linux命令
Java程序中要执行linux命令主要依赖2个类:Process和Runtime 首先看一下Process类: ProcessBuilder.start() 和 Runtime.exec 方法创建一个 ...
- 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, ...