利用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是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以 ...
随机推荐
- vimTAB宽度等设置
10 set shiftwidth=4 11 set softtabstop=4 12 set textwidth=200 13 set nu 14 set autoindent 15 set noe ...
- ecshop后台添加菜单项,权限问题
ecshop后台自定义菜单涉及到几个重要的权限控制的文件,先做如下总结: 后台添加菜单项,并设置权限的步骤.:(以在系统模块添加申请友链菜单为例)commn.php : \language ...
- debian安装jdk6
一般用命令 apt-get install sun-java6-jdk ,会报找不到源的错误. vim /etc/apt/sources.list # 於最下方新增此行 deb http://ftp. ...
- Is life always hard?
原文来自我的独立blog: http://www.yuanyong.org/blog/midnightsun/is-life-always-hard 和两个朋友聊天. 小L在考研,打电话过去的时候小L ...
- ubuntu下perl SVG老是make失败
解决方法是用libgd-svg-perl软件包代替.
- 迷宫寻宝(一)(bfs)
迷宫寻宝(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个很特别的迷宫,迷宫里有N个编 ...
- SQL Server 2008如何导出带数据的脚本文件
第一步,选中需要导出脚本的数据库,右键选中 第二步,选取弹出菜单中的任务-生成脚本选项(会弹出一SQL生成脚本的向导) 第三步,在向导中点击下一步,弹出选择数据库界面(默认是自己之前选中的数据库),把 ...
- Linux学习之route
Linux系统的route命令用于显示和操作IP路由表(show / manipulate the IP routing table).要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或 ...
- javascript新窗口打开链接window.open()被阻拦的解决办法
场景是ajax提交,比较后端效验数据,需要用户登录,提示后并需要新窗口打开登录的链接,使用window.open(url);往往会被浏览器认为是广告而被拦截. data.url是ajax返回的链接地址 ...
- whereis linux文件搜索
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b).man说明文件(参数-m)和源代码文件(参数-s).如果省略参数,则返回所有信息. 和find相比,whereis查找的速度非 ...