谁帮我调试下这个Socket编程的代码?

using  System;
using  System.IO;
using  System.Net.Sockets;
namespace  QTCPServer1
{
    
/// <summary>
    
/// QServer1 的摘要说明。
    
/// </summary>

    class QServer1
    
{
        
/// <summary>
        
/// 应用程序的主入口点。
        
/// </summary>

        [STAThread]
        
static void Main(string[] args)
        
{
            
//
            
// TODO: 在此处添加代码以启动应用程序
            
//
            QServer1 qServer=new QServer1();
            Console.WriteLine ( 
"initializing server..." );
            
//监听端口60000
            TcpListener listener;
            
try
            
{
                listener 
= new TcpListener ( 60000 );
            }

            
catch
            
{
                Console.WriteLine(
"创建监听端口失败!");
                
return;
            }

            
//开始侦听
            listener.Start ();
            Console.WriteLine ( 
"server initialized, waiting for " +
                
"incoming connections..." );
            
bool loop = true;
            
//服务端一旦起动,就进入监听循环中,不退出。
            
//虽然,由于没有创建单独的线程来处理用户连接,
            
//不能支持并发的客户访问,但支持用户多次访问和不同用户的顺序访问。
            while ( loop )
            
{
                
//监听客户端的连接,线程阻塞,直到有客户端连接为止
                Socket s = listener.AcceptSocket ();
                
// 创建一个新的网络流对象,用于处理客户端的连接
                NetworkStream ns = new NetworkStream ( s );
                
// 为了处理方便,创立一个网络流对象,用它,可一次读入一行
                StreamReader r = new StreamReader ( ns );
                String command
=r.ReadLine();
                
char split=' ';
                String [] strRec;
                
//解析命令字符:strRec[0]应当是GET 
                
//strRec[1]应当为0或1 如果strRec[1]为1,则
                
//strRec[2]为学生的姓名
                strRec=command.Split(split);
                
int parameternum=strRec.GetLength(0);
                strRec[
0]=strRec[0].ToUpper();
                
//分析命令有效性,及把请求数据发回客户端
                if(strRec[0].Equals("GET"))
                
{
                    
if(strRec[1].Equals("0"))
                    
{
                        
for(int i=0;i<qServer.strName.GetLength(0);i++)
                        
{
                            String str
=qServer.strName[i]+
                                
"    "+qServer.strGrade[i]+" ";
                            Byte[] res 
= System.Text.Encoding.ASCII.
                                GetBytes(str.ToCharArray());
                            s.Send(res);
                        }

                    }

                    
else if(strRec[1].Equals("1"))
                    
{
                        
if(strRec.GetLength(0)!=3)
                        
{
                            String str
="The Command is Error,not include Name"+" ";
                                               Byte[] res 
= System.Text.Encoding.ASCII.
                                                   GetBytes(str.ToCharArray());
                            s.Send(res);
                        }

                        
else
                        
{
                            
int i;
                            
for(i=0;i<qServer.strName.GetLength(0);i++)
                            
{
                                strRec[
2]=strRec[2].Trim();
                                qServer.strName[i]
=qServer.strName[i].Trim();
                                
if(qServer.strName[i].Equals(strRec[2]))
                                
{
                                    String str
=qServer.strName[i]+
                                        
"    "+qServer.strGrade[i]+" ";
                                    Byte[] res 
= System.Text.Encoding.ASCII.
                                        GetBytes(str.ToCharArray());
                                    s.Send(res);
                                    
break;
                                }

                            }

                            
if(i==qServer.strName.GetLength(0))
                            
{
                                String str
="The Name is not find"+" ";
                                Byte[] res 
= System.Text.Encoding.ASCII.
                                    GetBytes(str.ToCharArray());
                                s.Send(res);
                            }

                        }


                    }

                    
else
                    
{
                        String str
="The Command is Error,Head is "+strRec[0]+
                            
",is should be GET"+" ";
                        Byte[] res 
= System.Text.Encoding.ASCII.
                            GetBytes(str.ToCharArray());
                        s.Send(res);
                        Console.WriteLine(
"The Command is Error,Head is {0},is should be GET",strRec[0]);
                                            }

                }

                
//处理完后发一个空行,客户端依此来确定,数据接收完毕。
                
//必须有,否则客户端不会退出。
                String str1=" ";
                Byte[] res1 
= System.Text.Encoding.ASCII.
                    GetBytes(str1.ToCharArray());
                s.Send(res1);
            }

        }

        
//二个数组用来存储学生姓名和成绩。这里为了示例,比较简单,
        
//实际使用时,应当用数据库来替代。
        
//注意二个数组的大小一定要一致。
        public string []strName={"qiugufeng",
                                    
"qiuyuanfeng",
                                    
"xiaoli  ",
                                    
"xiaowang "
                                }
;
        
public string []strGrade={"100",
                                     
"90",
                                     
"95",
                                     
"80"   
                                 }
;

    }

}


 这上面代码是服务器的代码.

 

using  System;
using  System.IO;
using  System.Net.Sockets;
namespace  QTCPClient1
{
    
/// <summary>
    
/// QClient1的摘要说明。
    
/// </summary>

    class QClient1
    
{
        
/// <summary>
        
/// 应用程序的主入口点。
        
/// </summary>

        [STAThread]
        
static void Main(string[] args)
        
{
            
//
            
// TODO: 在此处添加代码以启动应用程序
            
//

            
//判断命令行是否准确,应当是:
            
//服务器IP 端口(60000) 选项(0或1) [姓名](如果选项为1)
            if(args.GetLength(0)!=3&&args.GetLength(0)!=4)
            
{
                Console.WriteLine(
"参数错误!");
                Console.ReadLine();
                
return;
            }

            QClient1 qClient
=new QClient1();
            
//记录服务端IP和端口
            string strHost=args[0];
            
ushort uiPort=Convert.ToUInt16(args[1]);
            String command;
            
//生成通信指令字符串
            if(args.GetLength(0)==3)
                command
="GET "+args[2]+" ";
            
else
                command
="GET "+args[2]+" "+args[3]+" ";

            Console.WriteLine ( 
"initializing client..." );
            
//
            Console.WriteLine ( "connecting to " + strHost + ":" +
                uiPort 
+ "..." );
            
// 连接到服务端
            try
            
{
                qClient.client 
= new TcpClient ( strHost, uiPort );
            }

            
catch
            
{
                Console.WriteLine(
"不能连接到服务端!");
                
return;
            }

            
//初始化网络输入输出流
            qClient.outStream = qClient.client.GetStream ();
            qClient.inStream 
= new StreamReader ( qClient.outStream );
            Console.WriteLine ( 
"connected to " + strHost + ":" +
                uiPort );
            
//
            string result;
            Console.WriteLine ( command);
            Byte[] cmd 
= System.Text.Encoding.ASCII.GetBytes (
                command.ToCharArray () );
            
//发送请求通信指令
            qClient.outStream.Write ( cmd, 0, cmd.Length );
            
// get response
            Console.WriteLine ("Result is:");
            
while(true)
            
{
                
//接收结果
                result = qClient.inStream.ReadLine();
                
if(result.Equals(""))
                    
break;
                Console.WriteLine (  result );
            }

            Console.WriteLine ( 
"closing connection..." );
            
//断开连接
            qClient.client.Close ();
            Console.Write ( 
"press return to exit" );
            Console.ReadLine ();
        }

        
//TCP客户端对象
        private TcpClient client = null;
        
//输入输出流对象
        private NetworkStream outStream = null;
        
private StreamReader inStream = null;
    }

}

这上面的是客户端的代码.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值