这样的例子有很多的,自己找一些比较比较看看哪个好不就行了。
就socket而言(不论java还是c)我认为它的传输一般是不会有问题的,
主要看传输前和传输后的处理过程。建议以byte类型传输。

解决方案 »

  1.   

    to john:
      rmi再好,还是不能代替SOCKET。
    to  pluto:
      TCP是可靠传输,这个都知道,我试一下把数据转换成byte类型吧
      

  2.   

    that's ok!
    成功离你已经不远了。
      

  3.   

    我们将要通信的两端分成服务器和客户机端,即建立所谓的客户机/服务器编程模式。在服务器端必须先建立一个ServerSocket对象,然后等待客户机端的访问。而在客户机端,则是建立一个Socket对象直接跟服务器端连接,如果连接建立成功,则服务器端便会产生一个Socket对象,然后我们就可以利用这个Socket对象跟客户机端的Socket对象沟通了。此时在服务器和客户机之间建立了一条可靠连接,客户机和服务器可以在这条连接上可靠的传送数据。客户机发出请求,服务器监听来自客户机的请求,并为客户机提供相应的服务。
    基于上述原理,我们编写了简单的客户机/服务器模式的网络通信程序。在服务器端,服务器监听客户机的请求,为每个客户机请求建立Socket连接,从而为客户机提供服务。而所提供的服务只是读取来自客户机的一行文本,并把它发回给客户机。以下是服务器端的通信程序。
    import java.io.*;
    import java.net.*;
    class javaserver extends Thread {
    ServerSocket server;
    public javaserver() {
    try {
    server = new ServerSocket(600);
    }
    catch(IOException e) {
    System.out.println("Cannot create Server");
    System.exit(0);
    }
    System.out.println("Now socket server will Start");
    this.start();
    }
    public void run() {
    try {
    while (true) {
    Socket client = server.accept();
    service ss = new service(client);
    }
    }
    catch(IOException e) {
    System.out.println("cannot provide service !");
    System.exit(1);
    }
    }
    public static void main(String args[]){
    String data;
    DataInputStream KeyInput;
    new javaserver();
    KeyInput = new DataInputStream(System.in);
    try {
    data = KeyInput.readLine();
    }
    catch (IOException e){
    return;
    }
    if (data.equals("quit")) System.exit(1);
    }
    }class service extends Thread {
    String data;
    DataInputStream InputS;
    PrintStream OutputS;
    Socket Client;
    public service(Socket ClientSocket) {
    Client = ClientSocket;
    try {
    InputS = new DataInputStream
    (Client.getInputStream());
    OutputS = new PrintStream
    (Client.getOutputStream());
    }
    catch (IOException e){
    System.out.println("Cannot Connect with Client !");
    return;
    }
    this.start();
    }
    public void run(){
    try {
    while (true){
    data = InputS.readLine();
    if (data == null) break;
    else {
    OutputS.println(data);
    System.out.println("From Client: " + data);
    }
    }
    }
    catch (IOException e){
    System.out.println("Read Data error");
    }
    try {
    Client.close();
    }
    catch (IOException e){
    System.out.println("Cannot close socket");
    }
    }
    }在上面的程序中,我们使用了多线程机制。javaserver和service对象本身都是一个线程。javaserver对象首先创建一个ServerSocket对象,并启动线程的运行。它的run()方法用于监听来自客户机的连接。每当有一个新的客户机连接时,ServerSocket就会创建一个新的Socket类实例,并创建一个service对象,同时启动这个对象的线程。每个service对象用于完成与客户机通信、提供服务的任务。这样服务器可以同时与多个客户机连接,同时为多个客户机提供服务。当从标准输入中接收到quit字符串时,服务器退出运行。
    在客户机端,首先创建一个Socket对象,用于与服务器通信。它从标准输入中读取数据,把这些数据传给服务器,再从服务器读取应答信息,然后把这些应答信息写到标准输出。当读取了5行的数据后,客户机程序将退出运行。以下是客户机端的通信程序。
    import java.io.*;
    import java.net.*;
    class javaclient {
    public static void main(String args[]){
    String data;
    Socket Client;
    DataInputStream InputS;
    DataInputStream KeyS;
    PrintStream OutputS;
    int i = 0;
    try {
    Client = new Socket("172.17.3.2",600);
    InputS = new
    DataInputStream(Client.getInputStream());
    OutputS = new PrintStream
    (Client.getOutputStream());
    KeyS = new DataInputStream(System.in);
    }
    catch(IOException e){
    System.out.println("Cannot Connect
    with Server");
    return;
    }
    try {
    while (i<5){
    data = KeyS.readLine();
    OutputS.println(data);
    System.out.println("ECHO From
    Server:"+ InputS.readLine());
    i++;
    }
    }
    catch(IOException e) {
    System.out.println("IOException 
    Happened");
    }
    try{
    System.out.println("Now will
    end this program");
    Client.close();
    }
    catch(IOException e){
    System.out.println("system cannot
    close socket");
    }
    }
    }