2016-04-01 17 views
-3

GreetingClient kodunu yazdırmak için java soket istemci/sunucu kodunu değiştirme:kullanıcının girişini ve tersi

import java.net.*; 
    import java.io.*; 

    public class GreetingClient 
    { 
     public static void main(String [] args) 
     { 
      String serverName = args[0]; 
      int port = Integer.parseInt(args[1]); 
      try{ 
      System.out.println("Connecting to " + serverName + " on port " + port); 
      Socket client = new Socket(serverName, port); 
      System.out.println("Just connected to " + client.getRemoteSocketAddress()); 
      OutputStream outToServer = client.getOutputStream(); 
      DataOutputStream out = new DataOutputStream(outToServer); 
      out.writeUTF("Hello from "+ client.getLocalSocketAddress()); 
      InputStream inFromServer = client.getInputStream(); 
      DataInputStream in = new DataInputStream(inFromServer); 
      System.out.println("Server says " + in.readUTF()); 
      client.close(); 
      } 
      catch(IOException e){ 
      e.printStackTrace(); 
      } 
     } 
    } 

GreetingServer kodu

import java.net.*; 
    import java.io.*; 

    public class GreetingServer extends Thread{ 
     private ServerSocket serverSocket; 

     public GreetingServer(int port) throws IOException{ 
      serverSocket = new ServerSocket(port); 
      serverSocket.setSoTimeout(6000000); 
     } 

     public void run(){ 
      while(true){ 
      try{ 
       System.out.println("Waiting for client on port " + serverSocket.getLocalPort() + "..."); 
       Socket server = serverSocket.accept(); 
       System.out.println("Just connected to "+ server.getRemoteSocketAddress()); 
       DataInputStream in = new DataInputStream(server.getInputStream()); 
       System.out.println(in.readUTF()); 
       DataOutputStream out = new DataOutputStream(server.getOutputStream()); 
       out.writeUTF("Thank you for connecting to " + server.getLocalSocketAddress() + "\nGoodbye!"); 
       server.close(); 
      } 
      catch(SocketTimeoutException s){ 
       System.out.println("Socket timed out!"); 
       break; 
      } 
      catch(IOException e){ 
       e.printStackTrace(); 
       break; 
      } 
      } 
     } 
     public static void main(String [] args){ 
      int port = Integer.parseInt(args[0]); 
      try{ 
      Thread t = new GreetingServer(port); 
      t.start(); 
      } 
      catch(IOException e){ 
      e.printStackTrace(); 
      } 
     } 
    } 


//here is the code i want to insert in the client part. this code lets the user type a string (that i want to let it appear on the server side) and asks the user if he want to communicate with the server again. 
import java.util.*; 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
public class com { 
    public static void main(String[] args) { 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
     String s = null; 
     Scanner sc =new Scanner(System.in); 
     boolean yes = true; 
     do{ 
      System.out.println("What do you want to say to the server?"); 
      String toServer = sc.nextLine(); 
      System.out.println ("The client said: " + toServer); 
      System.out.println("Do you wish to continue(y/n)?"); 
      try { 
       s = br.readLine(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
       if(s.equals("n")){ 
        yes=false; 
       } 
     } 
     while (yes== true); 
    } 
} 

kod mükemmel ama ben want.first olarak çalışıyor Yukarıdaki kodu (son yorumlardan önce) karşılama kullanıcılarına dahil etmek için eklemek istiyorum. İstemci sunucusu iletişimi kurmak istiyorum. GreetingServer ve GreetingClient bölümünü kopyalayıp yapıştırdım. ancak istemci ve sunucu arasında bağlantı kurulduğunda, GreetingServer ve GreetingClient kodlarından gelen Dizeler görünür. istediğim bu değil. Kullanıcının girdisini GreetingClient'ten GreetingServer'a çıkarmak istiyorum. kullanici girdisi: hi server Sunucuda açilmalidir: hi server

+0

Sorunuz nedir? Ne sorduğun belli değil. Kod çalışmıyor mu? Bir istisna veya hata mesajı var mı? Gönderinizi düzenleyebilir ve yığın takibini ekleyebilir misiniz? –

+0

Bu kod, doğrudan [TutorialsPoint] adresinden (http://www.tutorialspoint.com/java/java_networking.htm) atıfta bulunulmadan alınır. Bu intihara karşı StackOverflow politikasının bir ihlalidir. Lütfen [Yığın Değişim SSS] 'ni okuyun (http://meta.stackexchange.com/questions/160077/users-are-calling-me-a-plagiarist-what-do-i-do) ve takip edin. Ve lütfen * kendi kodunuz * ile ilgili StackOverflow ile ilgili sorular sorun. – RealSkeptic

cevap

0

Takip etmeniz için bir UDP örnegidir. Aynı yaklaşımı kendi kodunuzda uygulamak basit olmalıdır.

UdpServer

import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.net.InetAddress; 

public class UdpServer { 
    private static final int SERVER_PORT = 9876; 

    public static void main(String args[]) { 
     try { 
      DatagramSocket serverSocket = new DatagramSocket(SERVER_PORT); 
      while(true) { 
       byte[] receiveData = new byte[1024]; 
       byte[] sendData = new byte[1024]; 
       DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); 
       serverSocket.receive(receivePacket); 
       String input = new String(receivePacket.getData()); 
       input = input.trim(); 
       System.out.println("RECEIVED: " + input); 
       InetAddress ipAddress = receivePacket.getAddress(); 
       int port = receivePacket.getPort(); 
       String capitalizedInput = input.toUpperCase(); 
       sendData = capitalizedInput.getBytes(); 
       DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, ipAddress, port); 
       serverSocket.send(sendPacket); 
       Thread.sleep(50); 
      } 
     } catch (Exception e) { 
      System.out.println(e); 
     } 
    } 
} 

UdpClient

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.net.InetAddress; 

public class UdpClient { 
    private static final String CLIENT_IP = "localhost"; 
    private static final int CLIENT_PORT = 9876; 

    public static void main(String args[]) { 
     try { 
      while (true) { 
       BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 
       DatagramSocket clientSocket = new DatagramSocket(); 
       InetAddress ipAddress = InetAddress.getByName(CLIENT_IP); 
       String input = bufferedReader.readLine(); 
       byte[] sendData = input.getBytes(); 
       byte[] receiveData = new byte[1024]; 
       DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, ipAddress, CLIENT_PORT); 
       clientSocket.send(sendPacket); 
       DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); 
       clientSocket.receive(receivePacket); 
       String modifiedInput = new String(receivePacket.getData()); 
       modifiedInput = modifiedInput.trim(); 
       System.out.println("FROM SERVER:" + modifiedInput); 
       clientSocket.close(); 
      } 
     } catch (Exception e) { 
      System.out.println(e); 
     } 
    } 
} 
+0

Bu orjinal kodunuz mu? Eğer değilse uygun atıfta bulunmanız gerekir. – Flexo

+0

Bu kodu yazdım. – ManoDestra

+0

Gerçekten emin değilim, ama bazı önemli benzerlikler var (örneğin, değişken isimleri, tam olarak basılan tüm kapak dizeleri, kullanılan port numarası) https://www.mtholyoke.edu/courses/srollins/cs325-f05/ http://www.amazon.com/gp/product/0132856204/ref=as_li_tl?ie=UTF8&camp=1789&creative=390957&creativeASIN=0132856204&linkCode=as2&tag=systembash-20&linkId=ZFUIZQW2DOLTUENY aslen web/kod/UDPClient.java, (Sürümünüz, bağlantı kurduğum bu sürümdeki "garip" şeylerden bazılarını açıkça çözdü). Bunun bundan kaynaklandığı görülüyor. – Flexo