原帖出处:http://www.cnblogs.com/axzxs2001/archive/2009/07/27/1532258.html
TCP/IP(Transmission Control Protocol/Internet Protocol)的简写,中文译名为传输控制协议/网际协议,又叫网络通讯协议,这个协议是是Internet最基本的协议、Internet国际互联网络的基础,简单地说,就是由网络层的IP协议和传输层的TCP协议组成的。
TCP/IP 是供已连接因特网的计算机进行通信的通信协议。
TCP/IP 定义了设备(并非只有计算机)如何连入因特网,以及数据如何在它们之间传输的标准。
IP(Internet Protocol)因特网协议。从这个名称我们就可以知道IP协议的重要性。在现实生活中,我们进行货物运输时都是把货物包装成一个个的纸箱或者是集装箱之后才进行运输,在网络世界中各种信息也是通过类似的方式进行传输的。IP协议规定了数据传输时的基本单元和格式。如果比作货物运输,IP协议规定了货物打包时的包装箱尺寸和包装的程序。 除了这些以外,IP协议还定义了数据包的递交办法和路由选择。同样用货物运输做比喻,IP协议规定了货物的运输方法和运输路线。
我们已经知道了IP协议很重要,IP协议已经规定了数据传输的主要内容,那TCP(Transmission Control Protocol)协议是做什么的呢?不知大家发现没有,在IP协议中定义的传输是单向的,也就是说发出去的货物对方有没有收到我们是不知道的。就好像8毛钱一份的平信一样。那对于重要的信件我们要寄挂号信怎么办呢?TCP协议就是帮我们寄“挂号信”的。TCP协议提供了可靠的面向对象的数据流传输服务的规则和约定。简单的说在TCP模式中,对方发一个数据包给你,你要发一个确认数据包给对方。通过这种确认来提供可靠性。
UDP与TCP位于同一层,但它不管数据包的顺序、错误或重发。因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询---应答的服务,例如NFS。相对于FTP或Telnet,这些服务需要交换的信息量较小。使用UDP的服务包括NTP(网络时间协议)和DNS(DNS也使用TCP)。
欺骗UDP包比欺骗TCP包更容易,因为UDP没有建立初始化连接(也可以称为握手)(因为在两个系统间没有虚电路),也就是说,与UDP相关的服务面临着更大的危险。
TCP和UDP服务通常有一个客户/服务器的关系,例如,一个Telnet服务进程开始在系统上处于空闲状态,等待着连接。用户使用Telnet客户程序与服务进程建立一个连接。客户程序向服务进程写入信息,服务进程读出信息并发出响应,客户程序读出响应并向用户报告。因而,这个连接是双工的,可以用来进行读写。
两个系统间的多重Telnet连接是如何相互确认并协调一致呢?TCP或UDP连接唯一地使用每个信息中的如下四项进行确认:
1.源IP地址 发送包的IP地址。
2.目的IP地址 接收包的IP地址。
3.源端口 源系统上的连接的端口。
4.目的端口 目的系统上的连接的端口。
端口是一个软件结构,被客户程序或服务进程用来发送和接收信息。一个端口对应一个16比特的数。服务进程通常使用一个固定的端口,例如,SMTP使用25。这些端口号是‘广为人知’的,因为在建立与特定的主机或服务的连接时,需要这些地址和目的地址进行通讯。
在.net中,我们用TCPClient和TCPListener类来实现点对点通讯,这两个命名空间位于此System.Net.Sockets
TcpListener 类提供一些简单方法,用于在阻止同步模式下侦听和接受传入连接请求。可使用 TcpClient 或 Socket 来连接 TcpListener。可使用 IPEndPoint、本地 IP 地址及端口号或者仅使用端口号,来创建 TcpListener。
TcpClient 类提供了一些简单的方法,用于在同步阻止模式下通过网络来连接、发送和接收流数据。
一服务端一客户端通讯
服务端Code
需要引入的命名空间:
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;
需要定义的字段:
Thread thr = null;
StreamReader sr;
StreamWriter sw;
监控单击事件按钮对应方法:
private void Con_BUT_Click(object sender, EventArgs e)
{
//启动一个线程,用来TCP/IP服务端监听
thr = new Thread(new ThreadStart(GetText));
thr.Start();
}
服务客户端一对一
public void GetText()
{
IPAddress IP = IPAddress.Parse(IP_TB.Text);
TcpListener server = new TcpListener(IP, int.Parse(Port_TB.Text));
server.Start(); //开始监听
TcpClient client = server.AcceptTcpClient();
NetworkStream stream = client.GetStream();
sr = new StreamReader(stream);
sw = new StreamWriter(stream);
try
{
while (true)
{
writestring("客户端说:" + sr.ReadLine());
}
}
catch
{
client.Close();
}
}
向Old_Tb中写聊天记录
void writestring(string s)
{
Old_TB.Text +=DateTime .Now.ToString("yy/MM/dd hh:mm:ss")+ s;
Old_TB.Text += "\r\n";
}
客户端Code
需要引入的命名空间:
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;
需要定义的字段:
Thread thr = null;
NetworkStream stream;
StreamReader sr;
StreamWriter sw;
连接按钮单击事件对应方法:
private void Con_BUT_Click(object sender, EventArgs e)
{
//启动一个线程,用来连接TCP/IP服务
thr = new Thread(new ThreadStart(ReadServer));
thr.Start(); }
连接服务端方法:
void ReadServer()
{
TcpClient TC = new TcpClient(IP_TB.Text, int.Parse(Port_TB.Text));
stream = TC.GetStream();
sr = new StreamReader(stream);
try
{
while (true)
{
writestring("服务端说:" + sr.ReadLine());
}
}
catch
{
TC.Close();
}
}
写发送和收到信息的方法:
void writestring(string s)
{
Old_TB.Text += s;
Old_TB.Text += "\r\n";
}
写发送方的方法
private void Send_But_Click(object sender, EventArgs e)
{
sw = new StreamWriter(stream);
string msg = New_TB.Text;
sw.WriteLine(msg);
sw.Flush();
writestring("客户端说:" + New_TB.Text);
}
一服务端多客户端通讯
服务端UI同上
服务端Code
需要引入的命名空间:
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;
监控单击事件按钮对应方法:
private void Con_BUT_Click(object sender, EventArgs e)
{
//启动一个线程,用来TCP/IP服务端监听
thr = new Thread(new ThreadStart(GetText));
thr.Start();
}
public void GetText()
{
IPAddress IP = IPAddress.Parse(IP_TB .Text);
TcpListener server = new TcpListener(IP, int.Parse(Port_TB.Text));
server.Start();
Byte[] bytes = new Byte[256];
String data = null;
while (true)
{
TcpClient client = server.AcceptTcpClient();
NetworkStream NetStr = client.GetStream();
int i = 0;
while ((i = NetStr.Read(bytes, 0, bytes.Length)) != 0)
{
data = System.Text.Encoding.UTF8.GetString(bytes);
writestring("客户端说:" + data);
data = New_TB.Text;
byte[] msg = System.Text.Encoding.UTF8.GetBytes(data);
NetStr.Write(msg, 0, msg.Length);
writestring("服务端说:" + data);;
}
client.Close();
}
}
向Old_Tb中写聊天记录
void writestring(string s)
{
Old_TB.Text +=DateTime .Now.ToString("yy/MM/dd hh:mm:ss")+ s;
Old_TB.Text += "\r\n";
}
客户端Code
需要引入的命名空间:
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;
写发送和收到信息的方法:
void writestring(string s)
{
Old_TB.Text += s;
Old_TB.Text += "\r\n";
}
写发送方的方法
if (New_TB.Text.Trim().Length > 0)
{
TcpClient TC = new TcpClient(IP_TB.Text, int.Parse(Port_TB.Text));
byte[] data = Encoding.UTF8.GetBytes(New_TB.Text);
NetworkStream NetStr = TC.GetStream();
NetStr.Write(data, 0, data.Length);
writestring("客户端说:" + New_TB.Text);
New_TB.Clear();
Byte[] newdate = new Byte[256];
int len = NetStr.Read(newdate, 0, newdate.Length);
writestring("服务端说:" + Encoding.UTF8.GetString(newdate));
NetStr.Close();
TC.Close();
}
UDP/IP通讯
服务端Code
监控按钮
thr = new Thread(new ThreadStart(UDPMethod));
thr.Start();
void UDPMethod()
{
UdpClient sender = new UdpClient(int.Parse(Port_TB.Text));
IPEndPoint endpoint = null;
while (true)
{
byte[] bytes = sender.Receive(ref endpoint);
writestring("UDP:" + Encoding.UTF8.GetString(bytes));
}
}
客户端Code
发送按钮
UDPMethod();
void UDPMethod()
{
UdpClient sender = new UdpClient();
IPEndPoint endpoint = new IPEndPoint(IPAddress.Parse(IP_TB.Text), int.Parse(Port_TB.Text));
byte[] bytes = Encoding.UTF8.GetBytes(New_TB.Text);
sender.Send(bytes, bytes.Length, endpoint);
writestring("客户端:"+New_TB .Text );
}
分享到:
相关推荐
《TCP/IP网络编程》尹圣雨 例程源码
TCP/IP网络编程是计算机科学与信息技术领域中的核心概念,它涉及到如何在互联网上进行数据通信。TCP(传输控制协议)和IP(网际协议)是构成互联网基础的两个主要协议,它们共同构成了TCP/IP协议族。这个“tcp/ip...
内容概要:主要收录了《TCP/IP网络编程》这本书每个章节内容所用到的代码,可以直接运行(是C语言文件,最好在Linux系统中运行使用) 适合人群:有一定编程语言基础,网络编程方面零基础也可学习 能学到什么:结合...
本书以通俗易懂的语言详细介绍了TCP/IP及其工作原理,以简单明了的编程实例全面介绍了基于Winsock的网络程序设计技术
《TCP/IP网络编程课件》深入解析网络接口层 网络接口层是TCP/IP协议栈的最底层,负责在物理媒介上传输数据。本课件详细介绍了网络接口层中涉及的物理层,包括数据传输介质的分类及其特性。 首先,物理层是网络通信...
《TCP/IP网络编程在VC++中的实践——基于MFC控件》 TCP/IP网络编程是计算机通信领域的重要组成部分,它允许应用程序通过网络进行数据交换。在这个主题中,我们将聚焦于如何在VC++环境下,利用MFC(Microsoft ...
本主题聚焦于“基于VC的TCP/IP网络编程”,主要关注如何利用Microsoft Visual C++(VC)作为开发工具来实现TCP/IP协议的网络应用程序,特别是侧重于接收功能的实现。 TCP(Transmission Control Protocol)和IP...
### TCP/IP网络编程基础知识 #### 一、网络编程概述 网络编程是指通过计算机网络实现不同设备间的数据交换。其实质是让一个设备(通常指计算机)向另一个设备发送数据,并接收来自另一设备的反馈数据。现代网络...
《TCP/IP网络编程学习资料》是一份非常宝贵的教育资源,它涵盖了网络编程的核心——TCP/IP协议。这份资料通过PPT课件和源代码相结合的方式,帮助学习者深入理解TCP/IP协议的工作原理及其在实际编程中的应用。 TCP/...
TCP/IP网络编程技术是计算机科学中的重要组成部分,它涉及到如何在不同设备间高效、可靠地传输数据。本课程报告和源码集为学习者提供了一次深入理解这一领域的绝佳机会。MFC(Microsoft Foundation Classes)是微软...
"基于TCP/IP的socket编程"是一个深入探讨如何使用socket接口进行网络通信的主题。Socket编程允许应用程序通过网络发送和接收数据,它是互联网上不同计算机之间交互的核心机制。 在给定的描述中,我们看到一个创新的...
TCP/IP网络编程是计算机通信领域中的重要组成部分,它允许设备之间进行数据交换。在这个场景中,我们关注的是使用Microsoft Foundation Class (MFC)库中的CSocket类来实现一个基于TCP的简单网络聊天程序。CSocket类...
在本项目"基于TCP/IP网络编程的java控制台聊天室"中,我们探索了Java语言在实现网络通信方面的强大功能,特别关注了TCP/IP协议栈的应用。这个项目旨在利用Java的高级特性,如多线程、套接字编程等,构建一个简单的...
该书的特点是以问题解决为导向,通过实践案例加深读者对TCP/IP网络编程的理解。 #### 内容结构与特点 本书由4章组成,共包含44个技巧,每个技巧都是为了帮助读者解决实际工作中可能遇到的问题而设计。这些技巧覆盖...
TCP/IP网络编程是计算机通信领域中的核心技术,它涵盖了网络数据传输的基础协议和应用层的编程接口。本资料主要关注TCP/IP协议族以及基于Socket的网络编程。Socket编程是实现网络通信的一种方式,它为应用程序提供了...
《TCP/IP网络编程》是尹圣雨先生撰写的一本深入探讨网络编程的著作,主要涵盖了TCP/IP协议族的基础知识以及在Linux和Windows平台上的Socket编程技术。这本书的源码提供了丰富的实例,帮助读者更好地理解和应用理论...
扫描版 超清百度网盘资源!!! 为初学者准备的网络编程! 韩国TCP/IP经典教程!... 本书针对网络编程初学者,面向具备C语言基础的套接字网络编程学习者,适合所有希望学习Linux和Windows网络编程的人。
本资源聚焦于“tcp/ip网络编程-进程间通信代码”,提供了几个C语言实现的示例,如echo_storeserv.c、pipe2.c、pipe3.c和pipe1.c,这些都是用于演示不同类型的进程间通信(IPC)技术。 1. **TCP/IP协议栈**:TCP/IP...
TCP/IP网络环境编程是计算机科学领域中的重要主题,它涉及到互联网通信的基础协议栈。这份“tcp/ip网络环境编程ppt”很可能是某所大学课程的教学资料,旨在帮助学生理解和掌握如何在TCP/IP网络环境下进行程序设计。...