需要引用 using System.Net;
using System.Net.Sockets;
 namespace TCPServer {
class Program {
static void Main(string[] args) {
int port = ;//端口
TcpClient tcpClient;//创建TCP连接对象(存入客服端所链接)
IPAddress[] serverIP= Dns.GetHostAddresses("127.0.0.1");//定义IP地址
IPAddress localAddres = serverIP[];//Ip地址;
TcpListener tcpListener = new TcpListener(localAddres, port);//监听套接字
tcpListener.Start();//开始监听
Console.WriteLine("服务器启动成功,等待用户接入。。。");//输出信息
try {
tcpClient = tcpListener.AcceptTcpClient();//每接收一个客服端生成一个TcpClient
NetworkStream networkStream = tcpClient.GetStream();//获取网络数据流
BinaryReader reader = new BinaryReader(networkStream);//定义数据读取对象
BinaryWriter writer = new BinaryWriter(networkStream);//定义数据写入对象
while(true) {
try {
string strReader = reader.ReadString();//接收消息
string[] strReaders = strReader.Split(new char[] { ' ' });//截取客服端信息
Console.WriteLine("有客服端接入,客户IP:" + strReaders[]);//输出接收客服端IP地址
string strWriter = "我是服务器,欢迎光临";//定义服务端要写的内容
Console.WriteLine("来自客服端的消息:" + strReaders[]);//输出接收的消息
writer.Write(strWriter);//向对方发送消息
}
catch {
break;
}
}
}
catch {
Console.WriteLine("接收数据失败");
} }
}
}

View 服务端

 namespace TCPClient {
class Program {
static void Main(string[] args) {
TcpClient tcpClient = new TcpClient();//创建一个TcpClient对象,自动分配主机IP地址和端口号
tcpClient.Connect("127.0.0.1", );//连接服务器,其IP和端口号为127.0.0.1和888
if (tcpClient != null) {
Console.WriteLine("连接服务器成功");
NetworkStream networkStream = tcpClient.GetStream();//获取网络数据流
BinaryReader reader = new BinaryReader(networkStream);//定义数据读取对象
BinaryWriter writer = new BinaryWriter(networkStream);//定义数据写入对象
string localip = "127.0.0.1";//存储本机IP,默认值为127.0.0.1
IPAddress[] ips = Dns.GetHostAddresses(Dns.GetHostName());//获取所有Ip地址
foreach (var item in ips) {
if (!item.IsIPv6SiteLocal)//如果不是ipv6
localip = item.ToString();
}
writer.Write(localip + " 你好服务器,我是客服端");//向服务器发送消息
while (true) {
try {
string strReader = reader.ReadString();//接收服务器发送的数据
if(strReader!=null) {
Console.WriteLine("来自服务器的消息:" + strReader);//输出接收服务器的消息
}
}
catch {
break;//出错退出循环
}
}
}
else {
Console.WriteLine("连接服务器错误");
}
}
}
}

View 客服端

上述代码,通俗易懂,注释详细,适合小白学习。

C# 简单TCP协议的更多相关文章

  1. Http协议与TCP协议简单理解(转)

    在C#编写代码,很多时候会遇到Http协议或者TCP协议,这里做一个简单的理解.TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性.Http协议是建立在TCP协议基础之上 ...

  2. Http协议与TCP协议简单理解

    TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性.Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求.Http会通 ...

  3. TCP协议三次握手过程分析【图解,简单清晰】

    转自:http://www.cnblogs.com/rootq/articles/1377355.html TCP(Transmission Control Protocol) 传输控制协议 TCP是 ...

  4. Http与协议TCP协议简单易懂

    于C#编写代码,很多时候会遇到Http协议或TCP合约,这里做一个简单的了解. TCP对应于该传送层协议,和HTTP对应于应用层协议,从本质上讲,两者是没有可比性.Http该协议是基于TCP之上的,当 ...

  5. 基于Tcp协议的简单Socket通信实例(JAVA)

    好久没写博客了,前段时间忙于做项目,耽误了些时间,今天开始继续写起~ 今天来讲下关于Socket通信的简单应用,关于什么是Socket以及一些网络编程的基础,这里就不提了,只记录最简单易懂实用的东西. ...

  6. 网络编程----------SOCKET编程实现简单的TCP协议

    首先我们须要大致了解TCP的几点知识: 1.TCP的特点:面向连接的可靠性传输 2.TCP的三次握手建立连接和四次挥手释放连接.但为什么TCP要三次握手建立连接呢? 答:由于两次握手无法保证可靠性.若 ...

  7. 【转载】Http协议与TCP协议简单理解

    在C#编写代码,很多时候会遇到Http协议或者TCP协议,这里做一个简单的理解.TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性.Http协议是建立在TCP协议基础之上 ...

  8. Java基础之UDP协议和TCP协议简介及简单案例的实现

    写在前面的废话:马上要找工作了,做了一年的.net ,到要找工作了发现没几个大公司招聘.net工程师,真是坑爹呀.哎,java就java吧,咱从头开始学呗,啥也不说了,玩命撸吧,我真可怜啊. 摘要: ...

  9. 关于Http协议与TCP协议的一些简单理解

    TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性.Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求.Http会通 ...

随机推荐

  1. shell问题集合

    1.syntax error near unexpected token `then' if后要有空格,[] 中括号的开头和结尾要有空格! [ $1-eq"root" ]中括号中的 ...

  2. virtualbox下ubuntu共享文件夹自动挂载

    1.若想删除挂载,可执行命令 umount -f /mnt/share 2.若想开机自动挂载,可以在 /etc/fstab 文件末添加一项     sharing /mnt/share vboxsf  ...

  3. kill the lock

    $ killall -s 9 krunner_lock [ZT][From:] http://www.commandlinefu.com/commands/view/2264/unlock-your- ...

  4. Delphi 快速获取文件大小(使用_lopen和FileSeek,此函数可以快速获取文件大小,即使文件已经被其它程序锁定)

    function GetFileSize(const fName: AnsiString): Int64; var hFile: THandle; begin hFile := _lopen(PAns ...

  5. 《The Economist》的阅读

    cover story(封面故事): Clean energy's dirty secret:清洁能源的肮脏幕后: 0. 词汇 respite:n. 缓解:暂缓:暂时的休息:缓期执行:也作及物动词(v ...

  6. Linux性能测试 ss命令

    ss即socket state,也就是说,是可以查看系统中socket的状态的.我们可以用netstat,但为什么还要用ss这个工具呢,当然ss也是有好处的.当我们打开的socket数量很多时,net ...

  7. XF Grid使用-两行两列-跟WPF不同

    <?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http:/ ...

  8. 将RDL报表转换成RDLC报表的函数

    原文:将RDL报表转换成RDLC报表的函数 近日研究RDLC报表,发现其不能与RDL报表兼容,尤其是将RDL报表转换成RDLC报表.网上的资料贴出的的转换方式复杂且不切实际,遂决定深入研究.经研究发现 ...

  9. Android adb shell 无法启动:insufficient permissions for device

    解决办法1:lsusb查看vendorId号,然后在/etc/udev/rules.d/目录下增加(或修改)51-android.rules文件.增加一条记录:SUBSYSTEM=="usb ...

  10. HTML特殊编码转换

    var encoded = ""'&<>¡¢£¤" + "¥¦§¨©ª«¬­®" + "¯°±²³´µ¶·" ...