Socket(这样写可以实现P2P通信)

By | 04月08日
Advertisement

C# code
protected override void Dispose( bool disposing )
{
try
{
serverSocket.Close();//释放资源   
mythread.Abort ( ) ;//中止线程
}
catch{ }
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

C# code
Thread mythread ;
Socket serverSocket;
private void BeginListen()
{
//侦听服务器的所有网络IP和指定端口
IPEndPoint remotePoint=new IPEndPoint(IPAddress.Any,int.Parse(txtPort.Text));

serverSocket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);

serverSocket.Bind(remotePoint);
serverSocket.Listen(10);

this.label1.Text="正在监听...";

//这个死循环让监听持续进行
while(true)
{
try
{
Socket newSocket=serverSocket.Accept();
//得到远程机(发送信息到服务器的机器)的端口
IPEndPoint clientep=(IPEndPoint)newSocket.RemoteEndPoint;

//得到发送端的IP
this.txtLocalIP.Text="远端IP:"+clientep.Address.ToString()+"; 端口:"+clientep.Port.ToString();

string rmsg="";

int bytes=0;
//这个循环让Socket.Receive()方法持续进行
while(true)
{
byte[] byteMessage=new byte[10];
//循环执行,它会从头到尾自动接收数据给存放对象。
//Receive的返回值是一个接收数据的字节数,必须得到该值,用以控制循环的次数和转换成字符串的字符数。
bytes=newSocket.Receive(byteMessage);

//控制循环次数
if(bytes<=0)
break;

//用Encoding.GetEncoding("gb2312"); 来写的话字符“@”就显示不正常
System.Text.Encoding encoding = System.Text.Encoding.UTF8;

string msg=encoding.GetString(byteMessage,0,bytes);
rmsg=rmsg+msg;
}

string sTime = DateTime.Now.ToShortTimeString();
//得到远程机(发送信息到服务器的机器)的端口
rmsg=sTime+":"+"Message from:"+newSocket.RemoteEndPoint.ToString()+"\r\n"+rmsg+"\r\n"+"\r\n";

this.txtMessage.Text=this.txtMessage.Text+rmsg;

}
catch(SocketException ex)
{
this.label1.Text+=ex.ToString();
}
}
}

private void BeginSend()
{
string ip=this.txtIP.Text;
string port=this.txtPort.Text;
IPAddress serverIp=IPAddress.Parse(ip);
int serverPort=Convert.ToInt32(port);

//远程端口
IPEndPoint iep=new IPEndPoint(serverIp,serverPort);
byte[] byteMessage;

Socket socketSend=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
try
{
if(socketSend.Connected==false)
{
//联接到远程端
socketSend.Connect(iep);
}

System.Text.Encoding encoding = System.Text.Encoding.UTF8;
byteMessage=new byte[encoding.GetByteCount(textSendMessage.Text)];
byteMessage=encoding.GetBytes(textSendMessage.Text);

socketSend.Send(byteMessage);
socketSend.Shutdown(SocketShutdown.Both);
socketSend.Close();
textSendMessage.Text="";
}
catch(Exception ex)
{MessageBox.Show(ex.ToString());}
}

private void btnBeginSend_Click(object sender, System.EventArgs e)
{
BeginSend();
}

Similar Posts:

  • (原创)如何使用boost.asio写一个简单的通信程序(一)

    boost.asio相信很多人听说过,作为一个跨平台的通信库,它的性能是很出色的,然而它却谈不上好用,里面有很多地方稍不注意就会出错,要正确的用好asio还是需要花一番精力去学习和实践的,本文将通过介绍如何写一个简单的通信程序来告诉读者如何使用asio,希望对asio的初学者有所帮助.由于只是介绍其基本用法,作为例子的简单示例并不考虑很多的业务逻辑和异常处理,只是介绍基本用法,让初学者入门. 使用asio容易出错的一个主要原因是因为它是基于proactor模式实现的,asio有很多异步操作接口,

  • 写了一个javaSocket通信的例子,比较容易懂,主要是TCP协议的。下面是服务端的代码

    Java综合 . 写了一个javaSocket通信的例子,比较容易懂,主要是TCP协议的.下面是服务端的代码 Java代码 复制代码 收藏代码 1.import java.io.IOException; 2.import java.net.InetAddress; 3.import java.net.Socket; 4. 5.public class ServerSocket { 6. 7. public static void main(String[] args) { 8. beginSoc

  • linux网络编程:使用多进程并发处理多个client请求以及实现P2P通信

    前面已讲过使用一个进程实现服务端和客户端P2P通信的实例,但是它只能同时处理一个客户端的连接.如果要实现并发处理多个客户端的连接并且实现P2P通信,可以使用多进程来处理.相比与多线程来说,多进程耗费的系统资源是比较多的,后续会介绍使用线程池实现简单的数据收发. 使用多进程并发处理多个client请求以及实现P2P通信,父进程专门监听端口,每监听到一个连接就创建一个子进程处理这个客户端,于此同时,在子进程中创建一个孙子进程来处理数据的读取,在子进程实现数据的发送.如果客户端断开连接,recv函数会

  • P2P通信标准协议(三)之ICE

    在P2P通信标准协议(二)中,介绍了TURN的基本交互流程,在上篇结束部分也有说到,TURN作为STUN 协议的一个拓展,保持了STUN的工具性质,而不作为完整的NAT传输解决方案,只提供穿透NAT的功能, 并且由具体的应用程序来使用.虽然TURN也可以独立工作,但其本身就是被设计为ICE/RFC5245 的一部分,本章就来介绍一下ICE协议的具体内容. SDP ICE信息的描述格式通常采用标准的SDP,其全称为Session Description Protocol,即会话描述协议. SDP只

  • 阻断P2P通信

    阻断P2P通信 可以使用专业厂家生产的P2P硬件控制设备,来阻断P2P通信或者控制每个用户P2P的流量,但昂贵的设备价格可能是无法接受的.下面介绍两种廉价的解决方案. 利用Cisco路由器的NBAR功能 NBAR(Network-Based Application Recognition)网络应用识别是一种动态的.能在四到七层识别应用的技术,配合PDLM(Packet Description Language Module)可以识别P2P通信,但要求IOS版本在12.x以上. 说明:Cisco在

  • 利用 Windows Vista 和 WCF 中强大的 P2P 通信功能[MSDN]

    点对点技术 利用 Windows Vista 和 WCF 中强大的 P2P 通信功能 发布日期: 2006-10-17 | 更新日期: 2006-10-17 Justin Smith 本文基于 Windows Vista 和 .NET Framework 3.0 的预发布版本撰写而成.文中包含的所有信息均有变更可能. 本文将介绍以下内容: • 点对点网络基本原理 • Windows Vista 和 Windows Communication Foundation 中的 P2P 支持 • 利用 P

  • TCP实现P2P通信、TCP穿越NAT的方法、TCP打洞[转]

    这个标题用了两个顿号三个名称,其实说得是同一个东西,只是网上有不同的说法罢了,另外好像还有人叫TCP打孔(我的朋友小妞听说后问"要打孔啊,要不要我帮你去借个电钻过来啊?""~!·¥%--·!"). 闲话少说,我们先看一下技术背景: Internet的迅速发展以及IPv4 地址数量的限制使得网络地址翻译(NAT,Network Address Trans2lation)设备得到广泛应用.NAT设备允许处于同一NAT后的多台主机共享一个公网(本文将处于同一NAT后的网络

  • Socket编程之多路I/O通信

    在互联网相当普及的今天,在互联网上聊天对很多"网虫"来说已经是家常便饭了.聊天室程序可以说是网上最简单的多点通信程序.聊天室的实现方法有很多,但都是利用所谓的"多用户空间"来对信息进行交换,具有典型的多路I/O的架构.一个简单的聊天室, 从程序员的观点来看就是在多个I/O端点之间实现多对多的通信.其架构如图一所示.这样的实现在用户的眼里就是聊天室内任何一个人输入一段字符之后,其他用户都可以得到这一句话.这种"多用户空间"的架构在其他多点通信程序中

  • php编写socket客户端与短信猫通信

    1.什么是socket? 所谓socket,也称为套接字,用于描述IP地址和端口号,是一个通信链的句柄(类似与fopen获得的文件句柄).应用程序通过套接字向网络发出请求或者应答.ServerSocket用于服务器端,ClientSocket用于客户端.Socket是建立网络连接时使用的,在连接成功时,连接两端都会产生socket实例,操作这个实例,完成所需的会话.对于一个网络连接来说,套接字是平等的,并没有差别.不因为在服务器端或者客户端而产生任何不同级别.介绍一个最重要的Socket API

  • 2.6.27内核 netlink socket实现内核和用户的通信

    三天的努力,终于搞定了自己需要的这种通信机制:由内核态向用户态反馈信息: 先看代码,内核的: #include <linux/init.h> #include <linux/module.h> #include <linux/timer.h> #include <linux/time.h> #include <linux/types.h> #include <net/sock.h> #include <net/netlink.h

Tags: