利用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是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以 ...
随机推荐
- 论山寨手机与Android联姻 【3】手机是怎样生产出来的
要说清楚MTK在商业模式上有什么优势,以及Android对于MTK未来的手机开发会有什么影响,首先得了解手机从设计,开发到生产的整个过程.让我们先来看看手机的生产过程.在生产制造环节,山寨手机和正牌手 ...
- xxx.java: Recompile with -Xlint:deprecation for details
警告而已.有些方法1 已经过时,有更好的方法可以代替,比如 new java.util.Date().getYear(); => cal.get(Calendar.YEAR);2 发现过问题,且 ...
- Android 打包签名 从生成keystore到完成签名
进入生成工具: 工具帮助: 输入指令并获得结果: 转自: http://www.cppblog.com/fwxjj/archive/2010/05/24/116208.html 首先,我们需 ...
- ASP.NET Web API Authorization using Tokens
Planning real world REST API http://blog.developers.ba/post/2012/03/03/ASPNET-Web-API-Authorization- ...
- AngularJS初始用之 中间件 connect .static 静态文件不能找到
学习心得,软件更新太快,学习不能照书本. 在学习搭建Nodejs服务器时,掉坑了啦,太坑了,对于什么都不知道的初学者,开门就是坑...,怎么坚持学下去... 还好,现在的世界很大,如果你发现自己不是犯 ...
- 动态设置 GridView 列宽
/// <summary> /// 设置简单评语列的宽度 /// </summary> /// <param name=&quo ...
- poj1284--原根的性质
关于原根,在百度百科上有着详细的介绍,此题主要考查原根的两个性质 1.只有奇素数才有原根. 2.一个数的原根个数为其欧拉函数的欧拉函数. 综合以上特点,可得到,我们设输入数为n,那么输出结果就为n-1 ...
- hadoop笔记之Hive的数据类型
Hive的数据类型 Hive的数据类型 前面说过,Hive是一个数据仓库,相当于一个数据库.既然是数据库,那么就必须能创建表,既然有表,那么当中就有列,列中就有对应的类型 总的来讲,hive的数据类型 ...
- jqeruy的append一个有趣的用法(挪移控件位置)
使用:$(放置的容器).append($(需要迁移的控件)) 需求:列表中点击编辑可以在无刷修改 以前的方法是在列表中的每条数据直接放置控件.但是这个地区选择控件是服务器自定义控件不可以放置在列表的循 ...
- Android Shape画圆,矩形
画圆环代码如下: 画圆环,外边的边界宽度大一点即可: <?xml version="1.0" encoding="utf-8"?> <shap ...