1、TCP和UDP都属于socket通信协议,前者是以100个数据流的方式进行通信,后者是以数据包的方式进行通信。
2、TCP是有向连接协议,UDP是无向连接协议。
3、当tcpclient和服务器建立连接时,它们需要三个握手协议。UDP不需要握手,直接发送数据包。
4、TCP通信不会丢失数据,UDP通信会丢失数据包。
5、在通信可靠性方面,TCP比UDP更可靠。
6、安全性上,TCP安全保密要比UDP高。
7、TServerSocket/TClientSocket,是兼容的消息通知的非阻塞异步模式。
扩展资料:
在使用TCP通讯建立连接时采用客户端服务器模式,这种模式又常常被称为主从式架构,简称为C/S结构,属于一种网络通讯架构,将通讯的双方以客户端(Client )与服务器 (Server) 的身份区分开来。
使用C/S结构的通信常见的还有S7通信, ISO-on-TCP通信。
服务器的特征:被动角色,等待来自客户端的连接请求,处理请求并回传结果。
客户端的特征:主动角色,发送连接请求,等待服务器的响应。
网络编程中,使用Socket和TcpClient区别:Socket是对网络层操作 、TcpClient是对传输层操作。
TcpClient是在Socket的基础上运行的。
Socket完全可以涵盖TcpClient,只不过TcpClient为了简化一部分Socket的功能。
Socket支持TCP,UDP,IP包,Stream,Dgram等诸多类型。
而TcpClient只支持TCP和Stream。
如果你还有许多不懂的话,推荐你学NET网络编程前,好好学一学TCP/IP或OSI网络模型,这也是一门学科,不是简单几句话就可以解释清楚的,否则越解释你越糊涂。
服务端:
class mTcpServer。
class server。
{
/// <summary>。
/// 应用程序的主入口点。
/// </summary>。
[STAThread]。
static void Main(string[] args)。
{
Thread newThread;。
try。
{ 。
serverTcpListener = new TcpListener(localAddr, port);。
serverTcpListener.Start();。
while (true)。
{。
Console.Write("Waiting for a connection... ");。
client = serverTcpListener.AcceptTcpClient();。
Console.WriteLine("Connected!");。
newThread = new Thread(new ThreadStart(newScream));。
newThread.Start();。
}。
}
catch (SocketException e)。
{
Console.WriteLine("SocketException: {0}", e);。
}
finally。
{
// Stop listening for new clients.。
Console.WriteLine("Stop listening for new clients");。
serverTcpListener.Stop();。
}
Console.WriteLine("\nHit enter to continue...");。
Console.Read();。
}
static Int32 port = 9050;。
static IPAddress localAddr = IPAddress.Parse("127.0.0.1");。
static TcpListener serverTcpListener = null;。
static Byte[] bytes = new Byte[256];。
static String data = null;。
static TcpClient client;。
static void newScream()。
{
data = null;。
NetworkStream stream = client.GetStream();。
stream.Write(Encoding.ASCII.GetBytes("Connected!"), 0, 10);。
int i;。
while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)。
{
data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);。
Console.WriteLine("Received: {0}", data);。
data = data.ToUpper();。
byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);。
stream.Write(msg, 0, msg.Length);。
Console.WriteLine("Sent: {0}", data);。
}
}
}
客户端:
using System;
using System.Net;。
using System.Net.Sockets;。
using System.Text;。
namespace mTcpClint。
/// <summary>。
/// Class1 的摘要说明。
/// </summary>。
class client。
{
/// <summary>。
/// 应用程序的主入口点。
/// </summary>。
[STAThread]。
static void Main(string[] args)。
{
//
// TODO: 在此处添加代码以启动应用程序。
//
byte[] data = new byte[1024];。
//Socket newclient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);。
Console.Write("please input the server ip:");。
string ipadd = Console.ReadLine();。
Console.WriteLine();。
Console.Write("please input the server port:");。
int port = Convert.ToInt32(Console.ReadLine());。
IPEndPoint ie = new IPEndPoint(IPAddress.Parse(ipadd), port);//服务器的IP和端口。
TcpClient newclient;。
newclient = new TcpClient();。
newclient.Connect(ipadd, port);。
int recv = newclient.Client.Receive(data);。
string stringdata = Encoding.ASCII.GetString(data, 0, recv);。
Console.WriteLine(stringdata);。
while (true)。
{
string input = Console.ReadLine();。
if (input == "exit") break;。
newclient.Client.Send(Encoding.ASCII.GetBytes(input));。
data = new byte[1024];。
recv = newclient.Client.Receive(data);。
stringdata = Encoding.ASCII.GetString(data, 0, recv);。
Console.WriteLine(stringdata);。
}
Console.WriteLine("disconnect from server");。
newclient.Client.Shutdown(SocketShutdown.Both);。
newclient.Close();。
}
}
IAsyncResult是.net框架中定义的接口,用于返回异步操作的结果。
tcpclient相当于是放在IAsyncResult.AsyncState中的,通过这个属性传递。
iar是函数RequsetCallBack的参数啊,这是回调函数,回调函数是.net调用你的函数,普通函数是你调用.net的函数。
EndConnect的定义如此,微软的Begin...,End...都是采用统一的形式。