首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

java Socket菜鸟有关问题,求教

2013-11-13 
java Socket初学者问题,求教我从书上看来的代码,先看代码:import java.io.IOExceptionimport java.io.Inp

java Socket初学者问题,求教
我从书上看来的代码,
先看代码:


import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;


public class TCPEchoClient {
public static void main(String[] arg) throws UnknownHostException, IOException{
String[] args = {
"192.168.6.196",
"i love you ",
"8"
};
if ((args.length < 2) || (args.length > 3)) 
throw new IllegalArgumentException("Parameter(s): <Server> <Word> [<Port>]"); 
String server = args[0];
byte[] data = args[1].getBytes(); 
int servPort = (args.length == 3) ? Integer.parseInt(args[2]) : 7; 
Socket socket = new Socket(server, servPort); 
System.out.println("Connected to server...sending echo string"); 
InputStream in = socket.getInputStream(); 
OutputStream out = socket.getOutputStream(); 
out.write(data);
int totalBytesRcvd = 0; 
int bytesRcvd;
while (totalBytesRcvd < data.length) { 
if ((bytesRcvd = in.read(data, totalBytesRcvd, 
data.length - totalBytesRcvd)) == -1) 
throw new SocketException("Connection closed prematurely"); 
totalBytesRcvd += bytesRcvd; 

System.out.println("Received: " + new String(data));
socket.close();
}
}

jdk javac 编译:
编译 : ok [可以cmd看]
运行 :报错,Exception in thread "main" java.net.ConnectException: Connection refused: connect
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(Unknown Source)
        at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
        at java.net.PlainSocketImpl.connect(Unknown Source)
        at java.net.SocksSocketImpl.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.<init>(Unknown Source)
        at java.net.Socket.<init>(Unknown Source)
        at TCPEchoClient.main(TCPEchoClient.java:20)
接着,换用MyEclipse(我用的是6.5,懒得用那么新,节省资源):
编译并运行:报错,错误一模一样 ... 

-------------------------------------------

初学,真心解决不了,求教!
[解决办法]
你的客户端的代码呢?
[解决办法]
你的服务器端代码呢?刚才说错了,不好意思
[解决办法]
没有server当然连不上。
[解决办法]
socket都是成对出现的,而且启动顺序是先启动服务端代码(ServerSocket说:我在这儿等着你到来),然后启动客户端代码(Socket:留下来~)。

仔细看看书,应该还有个ServerSocket的实例的。
[解决办法]
嗯,目测你本机ip是192.168.6.196。
因此应该编写另外一个服务端程序,监听本机ip,然后先运行那个程序,再运行本程序。
[解决办法]
不知道服务,连不上服务,看一下端口是否有问题,
[解决办法]
自己改下对应的端口号

猜测应该是80,常用WEB端口号
String[] args = { "192.168.6.196", "i love you ", "80" };



自己配置的端口号推荐3000以后的端口,比较可靠不容易占用


具体查阅的话,可以找服务那边的
ServerSocket serverSocket = new ServerSocket(5000);

这样一句,括号里面的代表服务器的端口号
[解决办法]
再补一句,如果是端口占用了不是报那个错误,是这个:

java.net.BindException: Address already in use: JVM_Bind
at java.net.TwoStacksPlainSocketImpl.socketBind(Native Method)
at java.net.TwoStacksPlainSocketImpl.socketBind(Unknown Source)
at java.net.AbstractPlainSocketImpl.bind(Unknown Source)
at java.net.TwoStacksPlainSocketImpl.bind(Unknown Source)
at java.net.PlainSocketImpl.bind(Unknown Source)
at java.net.ServerSocket.bind(Unknown Source)
[解决办法]
引用:
Quote: 引用:

嗯,目测你本机ip是192.168.6.196。
因此应该编写另外一个服务端程序,监听本机ip,然后先运行那个程序,再运行本程序。


我初学,不懂 ?

书上就这个代码啊,然后直接测试,书上说代码通过了,还写了结果 。


可是我自己,无论是那书上的源代码,还是自己改编的代码,都抱错,都是Connection refused:connect!

书上应该是有两段代码的,只有先运行服务器上那部分代码,再运行客户端上那部分代码,才能成功的……
[解决办法]
引用:
Quote: 引用:

嗯,目测你本机ip是192.168.6.196。
因此应该编写另外一个服务端程序,监听本机ip,然后先运行那个程序,再运行本程序。


我初学,不懂 ?

书上就这个代码啊,然后直接测试,书上说代码通过了,还写了结果 。

可是我自己,无论是那书上的源代码,还是自己改编的代码,都抱错,都是Connection refused:connect!
建议楼主先把理论学一下,再开始写代码吧,理论是铺垫啊……
[解决办法]
把客户端和服务端的代码都运行起来 这样才能连通
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

嗯,目测你本机ip是192.168.6.196。
因此应该编写另外一个服务端程序,监听本机ip,然后先运行那个程序,再运行本程序。


我初学,不懂 ?

书上就这个代码啊,然后直接测试,书上说代码通过了,还写了结果 。

可是我自己,无论是那书上的源代码,还是自己改编的代码,都抱错,都是Connection refused:connect!
书上应该是有两段代码的,只有先运行服务器上那部分代码,再运行客户端上那部分代码,才能成功的……


这些代码在书上的18 - 20 页。
可是,书上的确只有这一段,不同的是,它上面说了这段代码后,然后直接就javac编译运行。

有两个代码,可他们真的不是相关联的,不信我吧源代码发给你:
------------ TCPEchoClient -------------

import java.net.Socket;
import java.net.SocketException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class TCPEchoClient {

  public static void main(String[] args) throws IOException {

    if ((args.length < 2) 
[解决办法]
 (args.length > 3))  // Test for correct # of args
      throw new IllegalArgumentException("Parameter(s): <Server> <Word> [<Port>]");

    String server = args[0];       // Server name or IP address
    // Convert argument String to bytes using the default character encoding
    byte[] data = args[1].getBytes();

    int servPort = (args.length == 3) ? Integer.parseInt(args[2]) : 7;

    // Create socket that is connected to server on specified port
    Socket socket = new Socket(server, servPort);
    System.out.println("Connected to server...sending echo string");

    InputStream in = socket.getInputStream();
    OutputStream out = socket.getOutputStream();

    out.write(data);  // Send the encoded string to the server

    // Receive the same string back from the server
    int totalBytesRcvd = 0;  // Total bytes received so far
    int bytesRcvd;           // Bytes received in last read
    while (totalBytesRcvd < data.length) {
      if ((bytesRcvd = in.read(data, totalBytesRcvd,  
                        data.length - totalBytesRcvd)) == -1)
        throw new SocketException("Connection closed prematurely");
      totalBytesRcvd += bytesRcvd;
    }  // data array is full

    System.out.println("Received: " + new String(data));

    socket.close();  // Close the socket and its streams
  }
}


---------------- TCPEchoServer ---------------------

import java.net.*;  // for Socket, ServerSocket, and InetAddress
import java.io.*;   // for IOException and Input/OutputStream

public class TCPEchoServer {

  private static final int BUFSIZE = 32;   // Size of receive buffer

  public static void main(String[] args) throws IOException {

    if (args.length != 1)  // Test for correct # of args
      throw new IllegalArgumentException("Parameter(s): <Port>");

    int servPort = Integer.parseInt(args[0]);

    // Create a server socket to accept client connection requests


    ServerSocket servSock = new ServerSocket(servPort);

    int recvMsgSize;   // Size of received message
    byte[] receiveBuf = new byte[BUFSIZE];  // Receive buffer

    while (true) { // Run forever, accepting and servicing connections
      Socket clntSock = servSock.accept();     // Get client connection

      SocketAddress clientAddress = clntSock.getRemoteSocketAddress();
      System.out.println("Handling client at " + clientAddress);
      
      InputStream in = clntSock.getInputStream();
      OutputStream out = clntSock.getOutputStream();

      // Receive until client closes connection, indicated by -1 return
      while ((recvMsgSize = in.read(receiveBuf)) != -1) {
        out.write(receiveBuf, 0, recvMsgSize);
      }

      clntSock.close();  // Close the socket.  We are done with this client!
    }
    /* NOT REACHED */
  }
}



这就是所谓客户端和服务器端代码,我书里面两个例子真是独立的,各自有各自的main。
所以 ....... 
---------------
回到刚才的问题,求科普,求解!
嗯 就该这样,你是在哪运行?Eclipse还是命令行?Eclipse的话就先编译成class再放到目录下用命令行运行:启动2个命令行,第一个命令行先运行server那个程序,然后再用第二个命令行运行client那个程序。

热点排行