http://community.csdn.net/Expert/topic/3707/3707072.xml?temp=.0852167
解决方案 »
- 股票代码检索框该怎么来做?
- 读数据库二进制字段
- Sunisoft.IrisSkin.SkinEngine 美化c#窗体,影响ToolTip的使用
- 关闭窗口所触发的事件
- 菜鸟提问:【C#中引用公共类】,期待您的解答
- axwebbrowser里有_Navigated事件吗
- 如何在C#中编写级次编码的树状结构
- 客户要求打印的规格是 3800*2810 ,有哪位兄弟有这方面的经验,请接分
- wpf 中listView 如何可以使某列的值相加??
- vs2013 c#调用同一方案中的C++生成的exe,能调试吗?
- 十万火急!求登录验证和对数据库的基本操作源代码!~
- 在SqlServer中文本字段,长度比较小的,用什么类型比较好?
应放在private void jieshou()里面。
服务端:using System;
using System.Threading;
using System.Net;
using System.Net.Sockets;
using System.IO;class ServerApp
{
public static void Main()
{
Server server=new Server();
server.Start();
}
}
class Server
{
private IPAddress ip;
private int port;
private TcpListener listener;
private Socket client;
private ZengSir processor;
private Thread processingThread;
public Server()
{
InitializeComponents();
}
private void InitializeComponents()
{
port=44444;
listener=new TcpListener(IPAddress.Any,port);
listener.Start();
}
public void Start()
{
try
{
while(true)
{
client=listener.AcceptSocket();
processor=new ZengSir(client);
processingThread=new Thread(new ThreadStart(processor.Process));
processingThread.Start();
}
}
catch(Exception ex)
{
Console.WriteLine(ex.ToString());
}
finally
{
listener.Stop();
}
}
}public class ZengSir
{
private bool quitRequested;
private string welcomeMessage;
private NetworkStream stream; //System.Net.Sockets
private StreamWriter writer;
private StreamReader reader;
private Socket client;
private string clientCommand;
public ZengSir(Socket client)
{
this.client=client;
InitializeComponent();
}
private void InitializeComponent()
{
quitRequested=false;
welcomeMessage="220 "+System.Environment.MachineName
+"Time Server ready.\r\n"
+"Supported command: \r\n"
+" G:Get server time\r\n"
+" Q:Quit\r\n";
stream=new NetworkStream(client);
writer=new StreamWriter(stream);
writer.AutoFlush=true;
reader=new StreamReader(stream);
}
public void Process()
{
try
{
writer.WriteLine(welcomeMessage);
while(!quitRequested)
{
writer.Write("telnet>");
clientCommand=reader.ReadLine();
switch(clientCommand)
{
case "Q":
case "q":
quitRequested=true;
break;
case "G":
case "g":
writer.WriteLine(DateTime.Now);
break;
default:
writer.WriteLine("Supported Command: G, Q.");
break;
}
}
}
catch(Exception ex)
{
Console.WriteLine(ex.ToString());
}
finally
{
writer.Close();
reader.Close();
stream.Close();
client.Close();
}
}
}
using System;
using System.Threading;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Text.RegularExpressions;
namespace ClientApp
{
class ClientApp
{ [STAThread]
static void Main(string[] args)
{
MyClient myClient = new MyClient();
myClient.Run();
}
} class MyClient
{
private string hostIP;
private string hostPort;
private TcpClient client;
private NetworkStream stream;
public MyClient()
{
InitializeComponents();
} private void InitializeComponents()
{
Console.WriteLine( "Client is running ... " );
bool inputCorrect = false;
while( inputCorrect != true )
{
Console.Write("Please input the HostIP: ");
hostIP = Console.ReadLine();
Console.Write("Please input the HostPort: ");
hostPort = Console.ReadLine();
if( IsValidIPAddress(hostIP) != true || IsValidPort(hostPort) != true )
Console.WriteLine("> Error: Invalid IP or Port!");
else
inputCorrect = true;
} } private bool IsValidIPAddress( string strIP )
{
// Return true if strIP is in valid ipAddress format.
return Regex.IsMatch(strIP,@"^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$");
} private bool IsValidPort( string strPort )
{
int port;
if( Regex.IsMatch(strPort, "^[0-9]*[1-9][0-9]*$") )
{
port = Convert.ToInt32(strPort);
if( port < 65535 )
return true;
}
return false;
} public void Run()
{
try
{
client = new TcpClient();
Console.WriteLine("Connect " + hostIP + ":" + hostPort);
client.Connect( IPAddress.Parse(hostIP), Int32.Parse(hostPort) );
Console.WriteLine("Connected Successfully.");
stream = client.GetStream();
Student student = new Student(stream);
student.Process();
}
catch( Exception err )
{
Console.WriteLine(err.ToString());
}
finally
{
client.Close();
}
}
} class Student
{
private bool over;
private NetworkStream stream; //System.Net.Sockets
private StreamWriter writer;
private StreamReader reader;
private string clientCommand;
private string serverResponse;
private char[] buffer; public Student(NetworkStream stream)
{
this.stream = stream;
InitializeComponent();
}
private void InitializeComponent()
{
over = false;
writer = new StreamWriter(stream);
writer.AutoFlush=true;
reader = new StreamReader(stream);
buffer = new char[7];
}
public void Process()
{
try
{
serverResponse = reader.ReadLine();
while( serverResponse != "")
{
Console.WriteLine( serverResponse );
serverResponse = reader.ReadLine();
}
while( !over )
{
reader.Read(buffer, 0, 7);
Console.Write(new string(buffer));
clientCommand = Console.ReadLine();
writer.WriteLine(clientCommand);
if(clientCommand == "Q" || clientCommand == "q")
{
over = true;
break;
}
Console.WriteLine( reader.ReadLine() );
}
}
catch(Exception ex)
{
Console.WriteLine(ex.ToString());
}
finally
{
writer.Close();
reader.Close();
stream.Close();
}
}
}
}
如果你的kaishi只执行一次那么你就只能接收一个客户端的连接。如果执行多次一定会产生异常。仅仅是为了测试可以将
newsk=sk.Accept();
xc=new Thread(new ThreadStart(jieshou));
xc.Start();
改为
byte[] by=new byte[555];
newsk.Receive(by);
string sj=System.Text.Encoding.Default.GetString(by);
this.richTextBox1.AppendText(sj+"\r\n");
没有必要使用一个根本就不起任何作用的线程。