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

程序如图

主要代码

    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实现的两个程序的通信的更多相关文章

  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. Realview MDK 中不用手动开中断的原因

    startup.s启动代码文件: ; Enter Supervisor Mode and set its Stack Pointer MSR CPSR_c, #Mode_SVC:OR:I_Bit:OR ...

  2. java.lang.OutOfMemoryError: PermGen space 解决方案

    只需两步: 将值改为512或者1024,然后CTRL+S,重启tomcat 和eclipse即可.

  3. JavaScript-1.最简单的程序之网页弹出对话框,显示为Warning---ShinePans

    代码: <html> <head> <meta http-equiv="content-type" content="text/html;c ...

  4. poj - 4045 - Power Station

    题意:一棵有n个结点的树,要取其中的一个结点,使得该结点到其他所有结点的距离和dis最小,即损耗I * I * R * dis最小,输出最小损耗和该结点(有多个的话按结点编号从小到大输出)(3 < ...

  5. HTTP状态码(HTTP Status Code)【转】

    HTTP状态码(HTTP Status Code) 一些常见的状态码为: 200 - 服务器成功返回网页 404 - 请求的网页不存在 503 - 服务不可用 所有状态解释:点击查看 1xx(临时响应 ...

  6. list 去重复

    两层遍历,如果后面的元素和前面的相同,就把后面的删除,达到去重复的目的. 比较的元素可以是list中含有的任意唯一性的元素. for(int x = 0;x < xglist.size()-1; ...

  7. response.getWriter().write()与out.print()的区别 (转)

    来自:http://www.cnblogs.com/zhwl/p/3623688.html 1.首先介绍write()和print()方法的区别:  (1).write():仅支持输出字符类型数据,字 ...

  8. Spring 整合hibernante 错误java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

    1.将所需的jar包全部拷贝到WEB-INF/lib下,再重新启动tomcat便能顺利通过了.参考http://blessht.iteye.com/blog/1104450 最佳答案   spring ...

  9. JavaWeb核心编程之(三.4)Servlet Context 配置

    ServletContextServlet引擎为每个Web应用程序都创建一个对应的ServletContext对象, ServletContext对象被包含在ServletConfig对象中, 调用S ...

  10. phpcms自定义分页

    在global.func.php中找到分页函数function pages($num, $curr_page, $perpage = 20, $urlrule = '', $array = array ...