程序设计成为简单的服务端和客户端之间的通信, 但通过一些方法可以将这两者进行统一起来, 让服务端也成为客户端, 让客户端也成为服务端, 使它们之间可以互相随时不间断的通信. 考虑到实现最原始的服务端和客户端之间的通信所需要的步骤对于写这样的程序是很有帮助的.
作为服务端, 要声明一个Socket A并绑定(Bind)某一个IP+这个IP指定的通信端口, 比如这个是127.0.0.1:9050, 然后开始监听(Listen), Listen可以监听来自多个IP传过来的连接请求, 具体可以同时连接几个客户端, Listen方法中可以设定一个参数. 如果Listen到某一个客户端发来连接请求了, 这时定义一个新的Socket B专门负责与这个客户端的通信, Socket B = A.Accept(). 这时可以获取这个客户端的IP和端口, IPEndPoint C = (IPEndPoint)B.RemoteEndPoint, C.Address和C.Port分别表示客户端C的IP地址和端口. 这时通过B.Send()方法就可以给C发送消息了, B.Receive()可以接收客户端C发来的信息.
作为客户端, 也需要声明一个Socket D并绑定某一个IP+本机一个未被占用的端口, 定义IPEndPoint E表示要进行连接的服务端Socket, 要指明E的IP和端口, 这样才可以进行端口对端口之间的通信, 接下来就可以尝试D.Connect(E), 连接成功之后就可以发送和接收数据了, D.Send(), D.Receive.
发送消息时, 数据都是以字节或字节数组为单位进行传输的, 比如我客户端D要发送"Hello World"则要这样写: D.Send(Encoding.ASCII.GetBytes("Hello World")). 接受消息时, 也是以字节或字节数组, 比如服务端要接受D刚才发送的Hello World, 可以这样写: Byte[] data = new Byte[1024]; int receivedDataLength = B.Receive(data); string stringdata = Encoding.ASCII.GetString(data, 0, receivedDataLength); stringdata这时就是Hello World.
上面只是大概的阐述了服务端与客户端之间的通信过程, 在网上找到了具体的代码例子, 也贴过来参考参考. 这个例子没有将服务端与客户端统一起来, 他是分别写服务端和客户端的.
服务端:
using System;
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace tcpserver
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class server
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main( string [] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//
int recv; // 用于表示客户端发送的信息长度
byte [] data;// = new byte [ 1024 ]; // 用于缓存客户端所发送的信息,通过socket传递的信息必须为字节数组
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9050 ); // 本机预使用的IP和端口
Socket newsock = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
newsock.Bind(ipep); // 绑定
newsock.Listen( 10 ); // 监听
Console.WriteLine( " waiting for a client " );
Socket client = newsock.Accept(); //当有可用的客户端连接尝试时执行,并返回一个新的socket,用于与客户端之间的通信
IPEndPoint clientip = (IPEndPoint)client.RemoteEndPoint;
Console.WriteLine( " connect with client: " + clientip.Address + " at port: " + clientip.Port);
string welcome = " welcome here! " ;
data = Encoding.ASCII.GetBytes(welcome);
client.Send(data,data.Length,SocketFlags.None); // 发送信息
while ( true )
{ // 用死循环来不断的从客户端获取信息
data = new byte [ 1024 ];
recv = client.Receive(data);
Console.WriteLine( " recv= " + recv);
if (recv == 0 ) // 当信息长度为0,说明客户端连接断开
break ;
Console.WriteLine(Encoding.ASCII.GetString(data, 0 ,recv));
client.Send(data,recv,SocketFlags.None);
}
Console.WriteLine( " Disconnected from " + clientip.Address);
client.Close();
newsock.Close();
}
}
}
TAG标签: 局域网 聊天 socket
本文转自 ☆★ 包罗万象网 ★☆ - http://www.baoluowanxiang.com 转载请注明出处,侵权必究!
原文链接:http://www.baoluowanxiang.com/a/program/csharp/2010/0815/1349.html
分享到:
相关推荐
目前基于Internet的即时聊天工具已经做的非常完美,本文介绍了基于c#用Socket做一个局域网聊天工具,有需要的朋友可以看一下。
局域网聊天工具socket通信技术局域网聊天工具socket通信技术
基于javaSocket通信的局域网聊天工具,是socket初学者的使用例子程序。
用Java实现的一个局域网聊天工具,支持好友维护,可以在聊天过程中发送图片,可以发送文件。解压后可直接用Eclipse做为一个Java项目打开。需要说明文件的朋友请下载:http://download.csdn.net/source/1567558, ...
局域网聊天工具的源代码,实现了局域网聊天的基本功能。使用了Socket类。
具体功能有: 1.采用了全新的界面风格 2.实现了基本文字聊天功能 3.实现了基本文件传送功能 4.实现了发送窗口抖动的功能 5.实现了语音聊天的功能 注:main函数在MainFrame类
以前在学校自学java的时候写的一个java swing的局域网聊天软件。 代码结构需要优化。还有很多BUG,而且软件也没有完善,不过聊天功能是实现了(可以发送图片、文字信息)。可以跨平台使用。测试环境在windows xp、...
本资源是本人前面发过的一个局域网聊天工具的升级版。主要在界面上进行了美化,并添加了语音聊天的功能。具体功能有: 1.采用了全新的界面风格(新增) 2.实现了基本文字聊天功能 3.实现了基本文件传送功能 4.实现了...
自己做的MFC的socket局域网聊天工具,可以传送文件,选择头像。
1.1 开发一个运行于LINUX平台局域网内部的通信软件,主要功能包括: 1、有方便实用的聊天界面; 2、可以实现对局域网内任意电脑的信息接受与发送。 1.2 开发环境 操作系统:Ubuntu 9.04 编译调试环境:VI+GCC+GDB ...
利用socket通信写的一个小工具,付源码,加以修改就是你的了。。。
花了一天时间写了一个简易的局域网聊天的小程序,供初学者参考下。主要是socket编程,也涉及一点点多线程,我也是初学者,所以仅供参考
Java 编写的可用于局域网进行即时通信的小工具。主体框架为服务端和客户端,服务端面架设服务器,客户端与服务器通信从而达到客户端交流的目的。提供包括添加好友,查询信息,聊天等基本工能。代码内容涉及Socket...
简单的局域网聊天工具源码,适合初学Socket编程的同学,使用Unity+C#编写
用Socket实现服务器客户端于一体的局域网即时通讯系统,主要实现单人聊天,群聊,文件传输
本次局域网聊天工具设计目的是加强对LINUX系统下编程的各种知识点的整合与灵活运用,使得我们更加熟悉LINUX下的编程操作,并且掌握QT基本界面设计。 本系统主要功能在于实现多个客户端与服务器端之间的信息传递。用...
本人是个刚学SOCKET的菜鸟,闲的没事用C#写的这个局域网聊天工具。该工具集客户端服务端与一体,主要功能聊天、传文件等。用到了多线程、socket等知识,压缩包内有源码 有需要的可以去看 共同学习 嘿嘿~~~~~
第1章 引言 1.1 目标与功能 局域网仿Q聊天工具是仿照腾讯QQ的主要功能设计,它主要针对当今社会节奏生活, 主要特点包含通用性即在每个局域网内可以运行,系统具有较高的可移植性和使用性、 也包含实用性各及时性,...
c#局域网聊天工具socket制作过程讲解与原代码讲解