我对java socket不是很懂.
现在有这么一种情况,不知道可不可行?现在局域网上有一台电脑,它上面有一个未知程序在监听某个端口;我能不能用java socket给此台机器此端口发送一个字符串,然后再接受那个未知程序发给我的一个字串?如果可行,最好有示例程序啊.!!

解决方案 »

  1.   

    //发例子给你import java.net.*;
    import java.io.*;public class Client {
        static final int PORT=8090;
        public static void main(String[] args) throws IOException {
            InetAddress addr =InetAddress.getByName("192.168.1.22");
            
            Socket socket = new Socket(addr, PORT);
            
            try {
                BufferedReader in = new BufferedReader(
                                new InputStreamReader(socket.getInputStream()));
                PrintWriter out = new PrintWriter( new BufferedWriter(
                                        new OutputStreamWriter( socket.getOutputStream())), true);
                for (int i = 0; i < 10; i++) {
                    out.println("你好! " + i); //发送
                    String str = in.readLine();  //接收
                    System.out.println(str);  //将收到的写出来
                    try{
                        Thread.sleep(500);
                    }catch(Exception ex){
                        ex.printStackTrace();
                    }
                }
                try{
                    Thread.sleep(10000);
                }catch(Exception e){
                    e.printStackTrace();
                }
                //out.println("END"); //发送关闭指令
            } finally {
                System.out.println("关闭ing...");
                socket.close();  //记得料理后事,就是把socket关闭
            }
        }
    }
      

  2.   

    你那台机器上的未知程序监听端口做什么操作,如果它收到你发的信息不做处理,你这边的Client端也收不到回信啊,所以关键还是看server端的流程啊!
      

  3.   

    建立一个socket客户端,建立输入输出流,剩下的事情我就不用说了
      

  4.   

    可以,客户端和服务器段端都写一个sender 和 receiver其中端口对应如下:
    client sender 端口= server receiver 端口
    client receiver 端口 = server sender 端口
      

  5.   

    可以的,你可以先用telnet去连接发送一下试试。
      

  6.   

    我用了  hbwhwang(catmiw的ID已经停用,现在用这个) 的例子,好象发出去以后没有回应啊!!
    楼上的,怎么用telnet测呢
      

  7.   

    不能通讯,你要查看一下,server端是否在指定端口处于监听状态,还有就是客户端是否连接正确,包括端口。最好的方式就是自已先写一个Server and Client,作测试,能通讯,就表示没问题。转到正式上就改一下参数就可以了
      

  8.   

    import java.net.*;
    import java.io.*;public class Client {
        static final int PORT=8090;
        public static void main(String[] args) throws IOException {
            InetAddress addr =InetAddress.getByName("192.168.1.22");
            
            Socket socket = new Socket(addr, PORT);
            
            try {
                BufferedReader in = new BufferedReader(
                                new InputStreamReader(socket.getInputStream()));
                PrintWriter out = new PrintWriter( new BufferedWriter(
                                        new OutputStreamWriter( socket.getOutputStream())), true);
                for (int i = 0; i < 10; i++) {
                    out.println("你好! " + i); //发送
                    String str = in.readLine();  //接收
                    System.out.println(str);  //将收到的写出来
                    try{
                        Thread.sleep(500);
                    }catch(Exception ex){
                        ex.printStackTrace();
                    }
                }
                try{
                    Thread.sleep(10000);
                }catch(Exception e){
                    e.printStackTrace();
                }
                //out.println("END"); //发送关闭指令
            } finally {
                System.out.println("关闭ing...");
                socket.close();  //记得料理后事,就是把socket关闭
            }
        }
    }
      

  9.   

    java不能做这个涉及到底层的操作
    直接到网卡驱动层识别截取数据包有c++,c等都可以,如果你实在要java,只有jni又或许网上有开源项目
      

  10.   

    client sender 端口= server receiver 端口
    client receiver 端口 = server sender 端口
    查看一下,server端是否在指定端口处于监听状态,还有就是客户端是否连接正确
      

  11.   

    我是楼主!我来汇报了:
    我用上面的示例程序做测试
          out.println("XXX" + i);      //发送
          
          String str = in.readLine();  //接收结果是,发送可以成功,在服务器的log里面可以看到我发送的字符串,但发送之后就停了,迟迟得不到回应.而且我用netstat看状态,连接已经建立了.咋回事啊,郁闷.
      

  12.   

    还有一个重要信息!!
    发送成功后(此时收不到回应),我用netstat看客户端端口状态,发现
    发现和服务器的端口已建立连接,下面还多了一行
    netbios-ssn端口 的信息,但状态是 time_wait
    难道与这个有关?
      

  13.   

    一般socket连接后,服务器那边会新起一个端口和你客户端连接
    以保证服务器端的ServerSocket的监听端口还可以监听别人的连接
      

  14.   

    这个问题已解决,接贴,新问题在下面,有兴趣的可以去看看,谢谢http://community.csdn.net/Expert/topic/4970/4970615.xml?temp=.359997对了,解决方法是我把in.readline()改成in.read(char[] xxx)的方法就ok了,不知道是个啥原因