c局域网即时通信
做过网络人都知道,要实现网络间的正常通信就必需选择合适的通信协议,否则轻则就会造成网络的接入速度太慢,工作不稳定,重则根本无法接通。今天我把我实际工作积累的此方面经验与大家分享,希望对还在迷茫中的您所有帮助!由于一些误导,有很多朋友误认为通信协议就是TCP/IP协议,只要安装了它任何网络都可正常连通,认为其它协议没有用,事实上,不同的网络协议都有其存在的必要。每一协议都有它所依赖的主要操作系统,不能随便选取。在一个网络中运行良好的协议,在另一个却未必能行得通,下面就本人这么几年来在局域网组建中选择网络通信协议的经验谈一谈各种主流操作系统下协议的选择与配置。要很好地选择与配置协议就一定要先了解目前各主要协议所适用的范围。在目前Internet时代,也许大家听的最多,用得最多还是TCP/IP协议,在很大程度上,似乎它就是协议的代名字,甚至有些朋友认为不管它三七二十一,统统装上TCP/IP协议就一定能实现成功连网,其实不然,或许您真的一装上它网络就能连通,那只不过是碰得好,您的网络太单一,而且正好是只需要安装TCP/IP协议就能连通的网络类型,要是再复杂一点,如我下所说种种网络类型,您未必那么幸运。还是先谈各协议的主要用途和特点吧。一、 通信协议的种类和特点目前常见的通信协议主要有:NetBEUI、IPX/SPX、NWLink、TCP/IP,在这几种协议中用得最多、最为复杂的当然还是TCP/IP协议,最为简单的是NetBEUI协议,它简单得不需要任何设置即可成功配置。1、 NetBEUI协议NetBEUI协议它的全称是:NetBios Extend User Interface,即用户扩展接口,它是由IBM于1985年公司开发的,它是一种体积小、效率高、速度快的通信协议,同时它也是微软最为喜爱的一种协议。它主要适用于早期的微软操作系统如:DOS、LAN Manager、Windows3.x和Windows for Workgroup,但微软在当今流行的WIN9X和WINNT中仍把它视为固有缺省协议,由此可见它并不是我们所认为是“多余”的,而且在有的操作系统中连网还是必不可少的,如在用WIN9X和WINME组网进入NT网络时一定不能仅用TCP/IP协议,还必需加上“NetBEUI”协议,否则就无法实现网络连通,不信试试看!因为它的出现比较早,也就有它的局限性,NetBEUI是专门为几台到百多机所组成的单段网络而设计的,它不具有跨网段工作的能力,也就是说它不具有“路由”功能,如果您在一服务器或工作站上安装了多个网卡作网桥时,将不能使用NetBEUI作为通信协议,这一点必需记清楚!NetBEUI通信协议的特点就是:a、体积小,因原来就要是DOS、LAN Manger等较低版本的操作系统,故它对系统的要求不高,运行后占用系统资源最少;b、上面已讲过,也恐是因为主要服务的对象较低版本的操作系统,它不具有路由功能,不能实现跨网络通信;c、因为简单,对系统要求低,也就适合初学组网人员学习使用。2、 IPX/SPX协议IPX/SPX协议的全称为:Internetwork Packet Exchange/Sequences Packet Exchange,网际包交换/顺序包交换。它是NOVELL公司为了适应网络的发展而开发的通信协议,它的体积比较大,但它在复杂环境下有很强的适应性,同时它也具有“路由”功能,能实现多网段间的跨段通信。当用户接入的是NetWare服务器时,IPX/SPX及其兼容协议应是最好的选择。但如在Windows环境中一般不用它,特别要强调的是在NT网络和WIN9X对等网中无法直接用IPX/SPX进行通信。IPX/SPX的工作方式较简单,不需要任何配置,它可通过“网络地址”来识别自己的身份。在整个协议中IPX是NetWare最底层的协议,它只负责数据在网络中的移动,并不保证数据传输是否成功,而SPX在协议中负责对整个传输的数据进行无差错处理。在NT中提供了两个IPX/SPX的兼容协议:NWLink IPX/SPX 兼容协议、NWLink NetBIOS,两者统称为NWLink 通信协议。它继承了IPX/SPX协议的优点,更适应了微软的操作系统和网络环境,当需要利用Windows系统进入NetWare服务器时,NWLink通信协议是最好的选择。3、 TCP/IP协议TCP/IP协议的全称是:Transmission Control Protocol /Internet Protocol,即传输控制协议/网际协议。它是微软公司为了适应不断发展的网络,实现自己主流操作系统与其它系统间不同网络的互连而收购开发的,它是目前最常用的一种协议(包括INTERNET),也可算是网络通信协议的一种通信标准协议,同时它也是最复杂、最为庞大的一种协议。TCP/IP协议最早用于UNIX系统中,现在是Internet的基础协议。TCP/IP通信协议具有很灵活性,支持任意规模的网络,几乎可连接所有的服务器和工作站,正因为的灵活性也带来了它的复杂性,它需要针对不同网络进行不同设置,且每个节点至少需要一个“IP地址”、一个“子网掩码”、一个“默认网关”和一个“主机名”。但是在局域网中微软为了简化TCP/IP协议的设置,在NT中配置了一个动态主机配置协议(DHCP),它可客户端自动分配一个IP地址,避免了出错。TCP/IP通信协议当然也有“路由”功能,它的地址是分级的,不同于IPX/SPX协议,这样系统就很容易找到网上的用户,IPX/SPX协议用的是一种广播协议,它经常会出现广播包堵塞,无法获得最佳网络带宽。但特别要注意的一点就是在用WIN9X和WINME组网进入NT网络时一定不能仅用TCP/IP协议,还必需加上“NetBEUI”协议,否则就无法实现网络连通。二、 协议选择的原则我们在选择网络通信协议时为了尽量做到一次成功,最好遵循以下原则:1、 所选择的协议要与网络结构、功能一致如果您的网络有网桥等类似路由设备,则必需选择具有路由功能的协议,如IPX/SPX、TCP/IP等,绝对不能选择NetBEUI作为通信协议。但是您的网络没有路由选择功能,只是单一的网段,能用NetBEUI作为通信协议的尽量选用,因为此协议占用系统资源最少,运行速度最快,如在DOS下与NT服务器相连,则最好选用NetBEUI作为通信协议,它比TCP/IP协议快且稳定,这一点我是深有体会的。以前我们公司在DOS通常用TCP/IP作为协议,但总是出现死机,有时根本连不上网,但改用`NetBEUI作为通信协议后,系统性能一下得到了提高。要注意的一点是如果用NetBEUI作为通信协议,则在您的NT服务器上同时也要装上此协议,否则根本行不通!还有就是在WIN9X(包括WINME)要实现与NT服务器成功连网则必需在客户和服务端安装上`NetBEUI协议,否则可能连不上网,这一点我也做过多次试验。当然对于较复杂的网络还是选择TCP/IP协议好。2、 尽量选用一种协议如果可能的话最好只选用一种通信协议,因为每一仲协议都要占用系统的内存资源的,会影响系统的工作效率的,在绝大多数情况下一种协议是完全可以满足连网需求的。
『贰』 C# TCP/IP中的客户端和服务器在局域网或外网怎么通信呀谁有完整的例子呀.
这是我以前在学校的时候做的一个c/s系统里面的类似qq聊天工具
你看看。。
这是客服端的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Net;
using System.Net.Sockets;
namespace demo2
{
public partial class frmTouchWe : Form
{
Thread a;
//发送IP跟端口
private UdpClient udp = new UdpClient("127.0.0.1",9000);
//接收端口
private UdpClient udpSend = new UdpClient(8000);
private IPEndPoint ip = new IPEndPoint(IPAddress.Any,0);
public frmTouchWe()
{
InitializeComponent();
Form. = false;
}
private void frmTouchWe_Load(object sender, EventArgs e)
{ //定义线程开始
a = new Thread(new ThreadStart(Run));
a.Start(); }
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
//客服接收信息。弹出窗体
frmAnswerInfo answerInfo = new frmAnswerInfo();
answerInfo.Show(); }
private void button1_Click(object sender, EventArgs e)
{
//在自己的信息栏中显示自己的信息
lsbInfo.Items.Add(txtInfo.Text);
//用户信息内容
string Mes = txtInfo.Text;
//用户信息
string mes = "用户:"+Program.user.id+"("+Program.user.name+")"+" " + time;
//转换成字节
byte[] b = UTF8Encoding.UTF8.GetBytes(Mes);
byte[] bb = UTF32Encoding.UTF8.GetBytes(mes);
//发送信息
udp.Send(bb, bb.Length);
udp.Send(b, b.Length);
txtInfo.Text = "";
}
//循环接受客服发来的信息
private void Run()
{
while (true)
{
byte[] b = udpSend.Receive(ref ip);
string mes = UTF8Encoding.UTF8.GetString(b);
lsbInfo.Items.Add(mes);
}
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
private void button3_Click_1(object sender, EventArgs e)
{
//清空所有项
lsbInfo.Items.Clear();
}
}
}
下面是服务器端的代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Net;
using System.Net.Sockets;
namespace demo2
{
public partial class frmAnswerInfo : Form
{
//定义一条线程,用来循环接收客户发来的信息
Thread a;
//定义另一条线程,用来升起窗体
Thread b;
//发送到信息的地址
private UdpClient udpSend = new UdpClient("127.0.0.1",8000);
//接收端口
private UdpClient udp = new UdpClient(9000);
private IPEndPoint ip = new IPEndPoint(IPAddress.Any,0);
public frmAnswerInfo()
{
InitializeComponent();
Form. = false;
}
//循环接收信息
private void Run()
{
while (true)
{
byte[] b = udp.Receive(ref ip);
string mes = UTF8Encoding.UTF8.GetString(b);
lsbInfo.Items.Add(mes);
}
}
private void frmAnswerInfo_Load(object sender, EventArgs e)
{
//设置窗体的位置属性(窗体加载时候慢慢从右下角升上来~类似qq广告~~)
this.Top = Screen.PrimaryScreen.WorkingArea.Height;
this.Left = Screen.PrimaryScreen.WorkingArea.Width - this.Width;
//设置窗体的名字
a = new Thread(new ThreadStart(Run));
b = new Thread(new ThreadStart(run));
//开始线程
a.Start();
b.Start();
}
//用户点击谈话时显示该窗体
private void run()
{
while (true)
{
this.Top = this.Top - 10;
Thread.Sleep(100);
if (Screen.PrimaryScreen.WorkingArea.Height - this.Height >= this.Top)
{
break;
}
}
}
//发送按钮编码
private void button1_Click(object sender, EventArgs e)
{
//获取当前时间
DateTime time = DateTime.Now;
//在自己的信息栏中显示自己发出去的信息
lsbInfo.Items.Add("在线客服:"+time);
lsbInfo.Items.Add(txtInfo.Text);
//在客户端显示自己的信息标题
string mes = "在线客服:"+time;
//信息内容
string Mes = txtInfo.Text;
//发送信息标题
byte[] b = UTF8Encoding.UTF8.GetBytes(mes);
//发送信息内容
byte[] bb = UTF8Encoding.UTF8.GetBytes(Mes);
udpSend.Send(b, b.Length);
udpSend.Send(bb,bb.Length);
txtInfo.Text = "";
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
private void button3_Click(object sender, EventArgs e)
{
//清除所有项
lsbInfo.Items.Clear();
}
}
}
这个可以跑的。。我以前就用过的。
『叁』 请问局域网内不同ip网段的电脑如何实现通信
看路由器支持不?
你的情况应该是两个路由器吧?一个IP段一个路专由器。两个路由器是独立连Internet,因此有属两个外网IP,并且是固定的。
原来两个IP段井水不犯河水。现在是要他们共享,是吧?
原理就是把192.168.2段的IP访问192.168.0段时,将其直接发到后者的路由器上,然后转发到192.168.0段的IP上。同理192.168.0段访问192.168.2段时,转发到192.168.0段的路由器上,再进一步转发。
设置方法:
在192.168.2段的路由器上设置将目标IP为192.168.0段的数据包全部转发到192.168.0段的路由器的外网IP上。如果接受端的路由器不转发,就要再设置接收端的,把来至192.168.2段的路由器的外网IP的数据包都合法接受就可以了。
注意是外网IP,因为两个路由器直接的传输是Internet外网之间进行的!
希望可以帮到楼主。。。前提是路由器支持这个功能。
『肆』 有什么软件可以很多人聊天,还可以群聊的嘛
可以多人聊天和群聊的软件有IM(即时通讯软件)、局域网聊天软件、57娱乐多人视频聊天软件、来往、情缘多人视频聊天软件:
1、IM(即时通讯软件):
即时通信M,即 Instant Messaging是指能够即时发送和接收互联网消息等的业务。1998年即时通信的功能日益丰富,逐渐集成了电子邮件、博客、音乐、电视、游戏和搜索等多种功能。
2、局域网聊天软件:
局域网聊天软件,是以企业内部办公,建立员工交流平台为基础,通过系统整合、边缘功能,为企业提供一整套的即时沟通和实时协作的解决方案。
由于企业对信息类软件的需求还在探索与尝试阶段,所以会导致很多系统不能互通,这也成了局域网聊天软件的一个使命。当信息软件被广泛使用之后,互通接口具备否,将被作为软件被选用的重要条件。
3、57娱乐多人视频聊天软件:
57娱乐多人视频网站运用的是国内最新的多人视频聊天软件,集视频互动、网络K歌、虚拟交友、休闲游戏于一体的大型综合视频娱乐聊天平台。
57娱乐多人视频聊天网站秉承良好的信誉服务于广大聊友,吸收了一大批高品位的成功男士和才艺超女,带给他们一个精彩的网络舞台,一个展示才艺和风度的聊天平台。
4、来往:
来往是阿里推出的即时通讯软件,也是阿里第一款独立于电商业务之外的社交产品,其核心功能是实现熟人之间的社交。除了语音、文字等基本的通讯功能之外,来往支持阅后即焚。
来往不仅是移动端产品,更是一个针对个人用户的新一代友好互动平台。它把人们的社交、生活和消费等不同的应用场景链接起来。
这个平台将会依托于整个阿里庞大的用户基数,以及过亿的手机淘宝和旺信用户之间的互动需求,打造出新的无线应用场景。
5、情缘多人视频聊天软件:
情缘多人视频聊天软件是国内最新多人视频聊天软件,集视频聊天、游戏、互动娱乐于一体的大型综合娱乐视频聊天平台!为广大用户提供了一个文明、真实、便捷的在线免费交友场所.
为了增进网络娱乐产业链的交流与合作。情缘多人视频聊天网站从开业至今一直以时尚;品味;休闲定位视频聊天市场。
以吸收了一大批高品位的成功男士和才艺超女。情缘娱乐社区视频聊天网站带你登上网络的舞台,给你这样的展示平台 。
『伍』 求C语言高手,实现一个简单的TCPIP程序以实现两台计算机之间的聊天通信,
你上面给出的代码其实就是MSDN里面的演示代码,不过不完整,只演示了两个函数的使用,我给你看看我写的TCP通讯程序,可以在同一个局域网内的两台不同计算机之间聊天:
这其实就是某本将网络通讯的教程里面的例子,不过是我自己重写了一遍,下面给你代码:
========================
下面是公共代码:
========================
#ifndef__CINITSOCK__H__
#define__CINITSOCK__H__
#include<winsock2.h>
#include<iphlpapi.h>
#pragmacomment(lib,"ws2_32.lib")
#pragmacomment(lib,"iphlpapi.lib")
classCInitSock
{
public:
CInitSock(intnMinorVer=2,intnMajorVer=2)
{
WSADATAwsData;
WORDwVer=MAKEWORD(nMinorVer,nMajorVer);
if(0!=WSAStartup(wVer,&wsData))exit(0);
}
~CInitSock()
{
WSACleanup();
}
};
#endif
========================
下面是客户端的代码:
=======================
#include"CInitSock.h"
#include<iostream>
usingnamespacestd;
CInitSockg_Sock;
voidmain()
{
SOCKETsockClient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(INVALID_SOCKET==sockClient)
return;
sockaddr_insockAddr;
sockAddr.sin_family=AF_INET;
sockAddr.sin_port=htons(4567);
sockAddr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
if(-1==connect(sockClient,(sockaddr*)&sockAddr,sizeof(sockAddr)))
{
cout<<"connectfailed"<<endl;
return;
}
while(true)
{
charszBuf[MAX_PATH];
ZeroMemory(szBuf,sizeof(szBuf));
cout<<"YouSay:";
cin>>szBuf;
if(SOCKET_ERROR ==send(sockClient,szBuf,MAX_PATH,0))
{
cout<<"sendfailed"<<endl;
return;
}
intnRecvLen=recv(sockClient,szBuf,MAX_PATH,0);
if(nRecvLen>0)
{
//szBuf[nRecvLen]='