Member 13058884 Ответов: 1

Как отправить данные (в частности, строки) по сети в протоколе TCP с помощью программирования сокетов на java?


на самом деле я хочу, чтобы программа считывала текстовый файл (клиентская машина), а затем отправляла его содержимое серверной программе, где она хранит его в базе данных sql

любые предложения, как я могу это реализовать

спасибо

Что я уже пробовал:

Клиент

import java.io.File;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.util.*;
import java.io.*;


public class Client { 
    
    public static void main(String[] args) throws Exception,IOException{
        
        //Initialize socket
        Socket socket = new Socket(InetAddress.getByName("LINUXSERVER"), 5000);
        byte[] contents = new byte[10000];
        File file = new File("d:\\test.txt");
        Scanner fis = new Scanner(file);
        //BufferedInputStream bis = new BufferedInputStream(fis); 
        String temp,temp1="";
        Vector v = new Vector();
          while(fis.hasNext()){
              temp = fis.next();
              for(int i =0;i<temp.length();i++){
                  if(temp.charAt(i)!=',' && temp.charAt(i)!=';'){
                      temp1 = temp1+temp.charAt(i);
                  }
                  else{
                      v.addElement(temp1);
                  }
              }
          }
        //Get socket's output stream
        OutputStream osw = socket.getOutputStream();
                Iterator itr = v.iterator();
                while(itr.hasNext()){
                    String temp2 = String.valueOf(itr.next());
                    byte senddata[] = temp2.getBytes("UTF-8");
                    System.out.print(senddata.toString());
                }
        //Read File Contents into contents array 
        //byte[] contents;
        /*long fileLength = file.length(); 
        long current = 0;
         
        long start = System.nanoTime();
        while(current!=fileLength){ 
            int size = 10000;
            if(fileLength - current >= size)
                current += size;    
            else{ 
                size = (int)(fileLength - current); 
                current = fileLength;
            } 
            contents = new byte[size]; 
            //bis.read(contents, 0, size);
            os.write(contents);
            System.out.println("Sending file ... "+(current*100)/fileLength+"% complete!");
        }   
        */
        osw.flush(); 
        //File transfer done. Close the socket connection!
        socket.close();
        System.out.println("File sent succesfully!");  
       
       
    }
}


Сервер

import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.*;

public class Server1 { 
    
    public static void main(String[] args) throws Exception 
    {
        //Initialize Sockets
        ServerSocket ssock = new ServerSocket(5000);
        System.out.println("Server Started");
        System.out.println("Waiting For Client...");
        Socket socket = ssock.accept();
        System.out.println("Client Connected Now Recieveing..");
        //The InetAddress specification
        InetAddress IA = InetAddress.getByName("192.168.0.110"); 
              byte[] contents = new byte[10000];
        //Initialize the FileOutputStream to the output file's full path.
        FileWriter fos = new FileWriter("d:\\1\\test.txt");
        BufferedWriter bw = new BufferedWriter(fos);
        PrintWriter pw = new PrintWriter(bw);
        //BufferedOutputStream bos = new BufferedOutputStream(fos);
        InputStream is = socket.getInputStream();
        
        //No of bytes read in one read() call
        int bytesRead = 0; 
        
        while((bytesRead=is.read(contents))!=-1){
            //bos.write(contents, 0, bytesRead); 
            pw.write(String.valueOf(bytesRead));
        }
        pw.flush();
        //bos.flush(); 
        
        socket.close(); 
        ssock.close();
        System.out.println("File saved successfully!");
    }
}

я еще не пробовал вставлять базу данных sql

NotPolitcallyCorrect

Какая-нибудь помощь в чем? "Я хочу" - это не описание проблемы.

Member 13058884

извините, что я новичок в codeproject, мне нужно некоторое предложение о том, как реализовать вставку базы данных sql, а также как отправить текст, прочитанный клиентской стороной, на сервер. я мог отправить любой файл по сети, но не мог отправить текст, прочитанный клиентом..

NotPolitcallyCorrect

"предложение о том, как реализовать вставку базы данных sql", вы заходите в свою любимую поисковую систему, набираете "Java sql server connection" и начинаете проводить некоторые исследования.
"я мог бы отправить любой файл по сети, но не мог бы отправить текст, прочитанный клиентом". Отправка текста-это одно и то же, так в чем же разница? Именно тогда вы узнаете, как использовать отладчик, чтобы узнать, что происходит в вашем коде.

1 Ответов

Рейтинг:
2

Jochen Arndt

Обычно для таких задач определяют протокол. В вашем случае я бы сначала отправил определенный заголовок, содержащий, по крайней мере, длину строки / файла. Тогда получатель будет заранее знать, как идут байты man. Другими (необязательными) полями заголовка могут быть имя файла, контрольная сумма, идентификационное значение и информация о версии (позволяет обновить протокол).

Возможно, также нет необходимости выполнять операции с содержимым файла. Просто отправьте его как есть (двоичный файл). Затем сервер сначала читает заголовок и обрабатывает его. Затем следующие данные могут быть записаны в буфер или файл и, наконец, сохранены в базе данных.