客户端与服务器段能连接的上,但是,通过客户端给服务器短发信息却收不到。
vc段:[spsheep2003 (虫虫) ]的程序段(俺刚刚用vc啊,盗用一段,感谢虫虫)
char ipaddr[35]="192.168.0.99";
char buff[100]="something";
sockaddr_in cli;
SOCKET cliSocket;
cli.sin_addr.s_addr=inet_addr(ipaddr);
cli.sin_family=AF_INET;
cli.sin_port=htons(8067);
cliSocket=socket(AF_INET,SOCK_STREAM,0);

int k=connect(cliSocket,(sockaddr*)&cli,sizeof(cli));
if(k==0)
AfxMessageBox("spsheep2003");
else 
AfxMessageBox("failed");
         send(cliSocket,buff,sizeof(buff),0);java段:
        ServerSocket s=new ServerSocket(8067);//在8067端口创建套接口
        
        try
        {
            while(true)
            {
                
                Socket socket=s.accept();//无限监听客户的请求
                System.out.println("收到数据报");
                  try
                  {
                      new ctiSocket(socket);//创建新线程
                  }ctiSocket类;部分。    public ctiSocket(Socket _socket) throws IOException  {
        socket = _socket;
        
        in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
        out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
        start();        
    }
    
    public void run() {
        try{
             while(true)
             {
                 out.println("123456");
                 str=in.readLine();
                 out.println("123456");
                 if(str.equals("end")) break;
                 System.out.println(str);
                 System.out.flush ();
             }
        } catch ( Exception e ){
            try {socket.close();
            e.printStackTrace ();
            }catch (Exception ee){}

        }
    }
当客户端关闭的时候,异常:
java.net.SocketException: Connection reset
        at java.net.SocketInputStream.read(SocketInputStream.java:168)
        at java.net.SocketInputStream.read(SocketInputStream.java:90)
        at sun.nio.cs.StreamDecoder$ConverterSD.implRead(StreamDecoder.java:285)
        at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:182)
        at java.io.InputStreamReader.read(InputStreamReader.java:167)
        at java.io.BufferedReader.fill(BufferedReader.java:136)
        at java.io.BufferedReader.readLine(BufferedReader.java:299)
        at java.io.BufferedReader.readLine(BufferedReader.java:362)
        at ctiSer.ctiSocket.run(ctiSocket.java:38)

救救我啊,我已经半个月没有睡过安稳觉了。呜呜。

解决方案 »

  1.   


    如果客户端用这一段,
    void CCSockClientDlg::OnSend() 
    {
    // TODO: Add your control notification handler code here
    if (m_clientSocket.m_bConnected)
    {
    m_clientSocket.m_nLength=m_MSG.GetWindowText
    (m_clientSocket.m_szBuffer, sizeof(m_clientSocket.m_szBuffer));
        m_clientSocket.AsyncSelect(FD_WRITE);
        m_MSG.SetWindowText("");
    }
    }//**********************************void MySock::OnSend(int nErrorCode) 
    {
    Send(m_szBuffer,m_nLength,0);
    m_nLength=0;
    memset(m_szBuffer,0,sizeof(m_szBuffer));
    //继续提请一个“读”的网络事件,接收Server消息
    AsyncSelect(FD_READ);
    CAsyncSocket::OnSend(nErrorCode);}则是在客户端关闭的时候,就以前发送的消息累加发送到服务器段,文本读取正确。
    同样产生上述引用异常。
    期待恢复。现在是3:06分了,大家就当救命吧。
      

  2.   

    我看好像是JAVA的问题,你好好看看你的JAVA程序!VC的好像没有错!
      

  3.   

    java的通讯我测试过了,是对的。或者说,vc和java的之间的通讯可能出问题。
      

  4.   

    好像是socket的问题。我上次也是这样尝试过,一端有c++写.  一端用java写,但是没有成功。我想知道用这种方式有谁成功过吗??谢谢
      

  5.   

    我曾经做过java的客户端与vc服务器的通信,它们之间用一组socket进行通信,没有问题。我在java端用的是nio包,非阻塞调用。
    你的java代码用的是阻塞式调用,所以会“客户端关闭的时候,就以前发送的消息累加发送到服务器段”。阻塞式我没有做过,感觉你的线程的run有问题,不应该是个无限循环,收完后就走人。
      

  6.   

    flagfly(我也不知道要去哪里):
    你好。连接起来以后,java端可以给vc消息。但是,vc端不能给java端发消息。
    我必须要等到这个数据才能作别的事情,所以用阻塞式,(非阻赛式也不懂了。)
    run中通过判断收到的是否为end来判断停止接收。用java作客户端的,上面的java程序没有问题。
      

  7.   

    谁说java和vc间的socket不能通信,tcp/ip标准是统一的,我做过的,可以!
      

  8.   

    int k=connect(cliSocket,(sockaddr*)&cli,sizeof(cli));
    if(k==0)
    AfxMessageBox("spsheep2003");
    else 
    AfxMessageBox("failed");//如果这里的connect失败了,下面的send会成功吗?
             send(cliSocket,buff,sizeof(buff),0);
    还有:send(cliSocket,buff,sizeof(buff),0);
    该是:send(cliSocket,buff,strlen(buff),0); 吧!?
      

  9.   

    有一次我就是因为sizeof(buf)和strlen(buf)写错了导致找BUG一个小时.
      

  10.   

    wbtony(寒夜星空) :
    你好,你有现成的程序可以给我一小段吗?[email protected] 小生叩谢了!