第一个控制台项目,包含2个cs文件,实现的作用是:服务器端给客户端发送了一个字符串“准备给你发送”,可以运行成功。1, 客户端文件 PictureTransferClientusing System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.IO;namespace TestSocket
{
class PictureTransferClient
{
static void Main()
{
new PictureTransferClient().t1();
}
public void t1()
{
Console.WriteLine("启动了 客户端"); try
{
const int bufferSize = 256; TcpClient client = new TcpClient();
IPHostEntry host = Dns.GetHostEntry("127.0.0.1");
client.Connect("127.0.0.1", 8888);
Console.WriteLine(" 客户端 连接成功 "); NetworkStream clientStream = client.GetStream(); ////
byte[] responseBuffer = new byte[bufferSize];
int bytesRead = 0;
do
{
bytesRead = clientStream.Read(responseBuffer, 0, bufferSize);
}
while (bytesRead > 0);
string fromServer = Encoding.Default.GetString(responseBuffer);
Console.WriteLine(fromServer); //string sendMessage = "jintian re le a ";
//byte[] bytesMessage = Encoding.Default.GetBytes(sendMessage);
//clientStream.Write(bytesMessage, 0, bytesMessage.Length);
clientStream.Close();
client.Close(); }
catch (ArgumentNullException ex)
{
Console.WriteLine("ArgumentNullException: {0}", ex);
}
catch (SocketException ex)
{
Console.WriteLine("SocketException: {0}", ex);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}2,服务器端文件 PictureTransferServerusing System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.IO;namespace TestSocket
{
class PictureTransferServer
{
static void Main()
{
new PictureTransferServer().t2();
} public void t2()
{
try
{
string sendMessage = "准备给你发送"; TcpListener listener = new TcpListener(IPAddress.Any, 8888);
listener.Start(); Console.WriteLine("启动了服务器端 的监听");
const int bufferSize = 256;
TcpClient client = listener.AcceptTcpClient();
Console.WriteLine(" 服务器端 连接 成功");
NetworkStream clientStream = client.GetStream(); byte[] bytesMessage = Encoding.Default.GetBytes(sendMessage);
Console.WriteLine("服务器端的 buffer的长度是: " + bytesMessage.Length);
clientStream.Write(bytesMessage, 0, bytesMessage.Length); //byte[] responseBuffer = new byte[bufferSize];
//int bytesRead = 0;
//do
//{
// bytesRead = clientStream.Read(responseBuffer, 0, bufferSize);
//}
//while (bytesRead > 0);
//string fromClient = Encoding.Default.GetString(responseBuffer);
//Console.WriteLine(fromClient);
clientStream.Close();
client.Close(); }
catch (ArgumentNullException e)
{
Console.WriteLine("ArgumentNullException: {0}", e);
}
catch (SocketException e)
{
Console.WriteLine("SocketException: {0}", e);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
} }
}
}
第二个控制台项目,包含2个cs文件,实现的作用是:服务器端给客户端发送了一个字符串“准备给你发送”,然后客户端给服务器端发送一个字符串“jintian re le a”,但是不能运行成功。1, 客户端文件 PictureTransferClientusing System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.IO;namespace TestSocket
{
class PictureTransferClient
{
static void Main()
{
new PictureTransferClient().t1();
}
public void t1()
{
Console.WriteLine("启动了 客户端"); try
{
const int bufferSize = 256; TcpClient client = new TcpClient();
IPHostEntry host = Dns.GetHostEntry("127.0.0.1");
client.Connect("127.0.0.1", 8888);
Console.WriteLine(" 客户端 连接成功 "); NetworkStream clientStream = client.GetStream(); ////
byte[] responseBuffer = new byte[bufferSize];
int bytesRead = 0;
do
{
bytesRead = clientStream.Read(responseBuffer, 0, bufferSize);
}
while (bytesRead > 0);
string fromServer = Encoding.Default.GetString(responseBuffer);
Console.WriteLine(fromServer); string sendMessage = "jintian re le a ";
byte[] bytesMessage = Encoding.Default.GetBytes(sendMessage);
clientStream.Write(bytesMessage, 0, bytesMessage.Length);
clientStream.Close();
client.Close(); }
catch (ArgumentNullException ex)
{
Console.WriteLine("ArgumentNullException: {0}", ex);
}
catch (SocketException ex)
{
Console.WriteLine("SocketException: {0}", ex);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}2,服务器端文件 PictureTransferServerusing System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.IO;namespace TestSocket
{
class PictureTransferServer
{
static void Main()
{
new PictureTransferServer().t2();
} public void t2()
{
try
{
string sendMessage = "准备给你发送"; TcpListener listener = new TcpListener(IPAddress.Any, 8888);
listener.Start(); Console.WriteLine("启动了服务器端 的监听");
const int bufferSize = 256;
TcpClient client = listener.AcceptTcpClient();
Console.WriteLine(" 服务器端 连接 成功");
NetworkStream clientStream = client.GetStream(); byte[] bytesMessage = Encoding.Default.GetBytes(sendMessage);
Console.WriteLine("服务器端的 buffer的长度是: " + bytesMessage.Length);
clientStream.Write(bytesMessage, 0, bytesMessage.Length); byte[] responseBuffer = new byte[bufferSize];
int bytesRead = 0;
do
{
bytesRead = clientStream.Read(responseBuffer, 0, bufferSize);
}
while (bytesRead > 0);
string fromClient = Encoding.Default.GetString(responseBuffer);
Console.WriteLine(fromClient);
clientStream.Close();
client.Close(); }
catch (ArgumentNullException e)
{
Console.WriteLine("ArgumentNullException: {0}", e);
}
catch (SocketException e)
{
Console.WriteLine("SocketException: {0}", e);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
} }
}
}
很简单的程序,代码完全一样,为什么只能单向发送,却不能双向发送呢?
非常谢谢大家啊。
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.IO;namespace TestSocket
{
class PictureTransferClient
{
static void Main()
{
new PictureTransferClient().t1();
}
public void t1()
{
Console.WriteLine("启动了 客户端"); try
{
const int bufferSize = 256; TcpClient client = new TcpClient();
IPHostEntry host = Dns.GetHostEntry("127.0.0.1");
client.Connect("127.0.0.1", 8888);
Console.WriteLine(" 客户端 连接成功 "); NetworkStream clientStream = client.GetStream(); ////
byte[] responseBuffer = new byte[bufferSize];
int bytesRead = 0;
do
{
bytesRead = clientStream.Read(responseBuffer, 0, bufferSize);
}
while (bytesRead > 0);
string fromServer = Encoding.Default.GetString(responseBuffer);
Console.WriteLine(fromServer); //string sendMessage = "jintian re le a ";
//byte[] bytesMessage = Encoding.Default.GetBytes(sendMessage);
//clientStream.Write(bytesMessage, 0, bytesMessage.Length);
clientStream.Close();
client.Close(); }
catch (ArgumentNullException ex)
{
Console.WriteLine("ArgumentNullException: {0}", ex);
}
catch (SocketException ex)
{
Console.WriteLine("SocketException: {0}", ex);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}2,服务器端文件 PictureTransferServerusing System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.IO;namespace TestSocket
{
class PictureTransferServer
{
static void Main()
{
new PictureTransferServer().t2();
} public void t2()
{
try
{
string sendMessage = "准备给你发送"; TcpListener listener = new TcpListener(IPAddress.Any, 8888);
listener.Start(); Console.WriteLine("启动了服务器端 的监听");
const int bufferSize = 256;
TcpClient client = listener.AcceptTcpClient();
Console.WriteLine(" 服务器端 连接 成功");
NetworkStream clientStream = client.GetStream(); byte[] bytesMessage = Encoding.Default.GetBytes(sendMessage);
Console.WriteLine("服务器端的 buffer的长度是: " + bytesMessage.Length);
clientStream.Write(bytesMessage, 0, bytesMessage.Length); //byte[] responseBuffer = new byte[bufferSize];
//int bytesRead = 0;
//do
//{
// bytesRead = clientStream.Read(responseBuffer, 0, bufferSize);
//}
//while (bytesRead > 0);
//string fromClient = Encoding.Default.GetString(responseBuffer);
//Console.WriteLine(fromClient);
clientStream.Close();
client.Close(); }
catch (ArgumentNullException e)
{
Console.WriteLine("ArgumentNullException: {0}", e);
}
catch (SocketException e)
{
Console.WriteLine("SocketException: {0}", e);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
} }
}
}
第二个控制台项目,包含2个cs文件,实现的作用是:服务器端给客户端发送了一个字符串“准备给你发送”,然后客户端给服务器端发送一个字符串“jintian re le a”,但是不能运行成功。1, 客户端文件 PictureTransferClientusing System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.IO;namespace TestSocket
{
class PictureTransferClient
{
static void Main()
{
new PictureTransferClient().t1();
}
public void t1()
{
Console.WriteLine("启动了 客户端"); try
{
const int bufferSize = 256; TcpClient client = new TcpClient();
IPHostEntry host = Dns.GetHostEntry("127.0.0.1");
client.Connect("127.0.0.1", 8888);
Console.WriteLine(" 客户端 连接成功 "); NetworkStream clientStream = client.GetStream(); ////
byte[] responseBuffer = new byte[bufferSize];
int bytesRead = 0;
do
{
bytesRead = clientStream.Read(responseBuffer, 0, bufferSize);
}
while (bytesRead > 0);
string fromServer = Encoding.Default.GetString(responseBuffer);
Console.WriteLine(fromServer); string sendMessage = "jintian re le a ";
byte[] bytesMessage = Encoding.Default.GetBytes(sendMessage);
clientStream.Write(bytesMessage, 0, bytesMessage.Length);
clientStream.Close();
client.Close(); }
catch (ArgumentNullException ex)
{
Console.WriteLine("ArgumentNullException: {0}", ex);
}
catch (SocketException ex)
{
Console.WriteLine("SocketException: {0}", ex);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}2,服务器端文件 PictureTransferServerusing System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.IO;namespace TestSocket
{
class PictureTransferServer
{
static void Main()
{
new PictureTransferServer().t2();
} public void t2()
{
try
{
string sendMessage = "准备给你发送"; TcpListener listener = new TcpListener(IPAddress.Any, 8888);
listener.Start(); Console.WriteLine("启动了服务器端 的监听");
const int bufferSize = 256;
TcpClient client = listener.AcceptTcpClient();
Console.WriteLine(" 服务器端 连接 成功");
NetworkStream clientStream = client.GetStream(); byte[] bytesMessage = Encoding.Default.GetBytes(sendMessage);
Console.WriteLine("服务器端的 buffer的长度是: " + bytesMessage.Length);
clientStream.Write(bytesMessage, 0, bytesMessage.Length); byte[] responseBuffer = new byte[bufferSize];
int bytesRead = 0;
do
{
bytesRead = clientStream.Read(responseBuffer, 0, bufferSize);
}
while (bytesRead > 0);
string fromClient = Encoding.Default.GetString(responseBuffer);
Console.WriteLine(fromClient);
clientStream.Close();
client.Close(); }
catch (ArgumentNullException e)
{
Console.WriteLine("ArgumentNullException: {0}", e);
}
catch (SocketException e)
{
Console.WriteLine("SocketException: {0}", e);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
} }
}
}
很简单的程序,代码完全一样,为什么只能单向发送,却不能双向发送呢?
非常谢谢大家啊。
解决方案 »
- 问个字符串转16进制 的问题
- 从数据库读取两张表,里面的记录有各自的起止时间,统计一张表中时间在另一张时间内的总和
- 如何判断该路径下是否存在该文件?
- 依赖注入,莫要让她擦肩而过
- 能帮我看看这多线程哪里出问题了吗?
- 类似输入法中软键盘的功能,把点击的字母输入当前的光标处 c#
- C#用System.Net.Mail发送邮件时,哪怕邮件地址是胡编乱造的如[email protected],仍然像发送成功了一样,根本不返回错误,也捕捉不到错误,如何
- 如何对已定义的结构体数组引用?
- 关于sql中UNION的问题?
- DotNet多层架构的内部数据传输标准的讨论
- 如何将c#桌面程序中的控件值传到html的函数中,并在调用html?
- VS中 如何去掉 窗体关闭按钮
do
{
bytesRead = clientStream.Read(responseBuffer, 0, bufferSize);
}
while (bytesRead > 0);第一次收到"准备给你发送"后,while的条件为true,然后再次进入了do.但是read方法是阻塞的,所以你的客户端线程停止了.但是你的服务器只有一次发送,所以不可能让客户端再跑下去了
非常谢谢,请问 怎样解决呢?让客户端、服务器端随意进行tcp通信呢?