Phần 1 : Client / Server :
Lập trình Client / Server với yêu cầu sau:
Trên máy Server :
- Lắng nghe cổng 1234
- Nếu Client kết nối vào cổng 1234 và gửi 1 chuối kí tự vào thì sẽ trả về kết quả là chuối được đảo thứ tự.
VD: Client gửi Hello thì kết quả trả về là olleH
Trên máy Client :
Kết nối vào Server qua cổng 1234 và gửi chuối kí tự đến server
Nhận kết quả là chuỗi đảo ngược
Bài chứ nè :
Lập trình Client / Server với yêu cầu sau:
Trên máy Server :
- Lắng nghe cổng 1234
- Nếu Client kết nối vào cổng 1234 và gửi 1 chuối kí tự vào thì sẽ trả về kết quả là chuối được đảo thứ tự.
VD: Client gửi Hello thì kết quả trả về là olleH
Trên máy Client :
Kết nối vào Server qua cổng 1234 và gửi chuối kí tự đến server
Nhận kết quả là chuỗi đảo ngược
Bài chứ nè :
- Code:
a. Chương trình trên máy chủ: ReverServerApp.java
import java.lang.System;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.IOException;
import java.io.DataInputStream;
import java.io.DataOutputStream;
public class ReverServerApp{
public static void main(String args[]){
try{
ServerSocket server=new ServerSocket(1234);
int localPort=server.getLocalPort();
System.out.println("Reverse Server is listening on port "+localPort+".");
Socket client=server.accept();
String destName=client.getInetAddress().getHostName();
int destPort=client.getPort();
System.out.println("Accepted connection to "+destName+" on port "+destPort+".");
DataInputStream inStream=new DataInputStream(client.getInputStream());
DataOutputStream outStream=new DataOutputStream(client.getOutputStream());
boolean finished=false;
do{
String inLine=inStream.readLine();
System.out.println("Receive "+inLine);
if(inLine.equalsIgnoreCase("quit"))
finished=true;
String outLine=new ReverseString(inLine.trim()).getString();
for(int i=0;i<outLine.length();++i)
outStream.write((byte)outLine.charAt(i));
outStream.write(13);
outStream.write(10);
outStream.flush();
System.out.println("Sent: "+outLine);
}while(!finished);
inStream.close();
outStream.close();
client.close();
server.close();
}catch(IOException ex){
System.out.println("IOException occurred.");
}
}
}
class ReverseString{
String s;
public ReverseString(String in){
int len=in.length();
char outChars[]=new char[len];
for(int i=0;i<len;++i)
outChars[len-1-i]=in.charAt(i);
s=String.valueOf(outChars);
}
public String getString(){
return s;
}
}
b. CHương trình trên máy khách :
PortTalkApp.java
import java.lang.System;
import java.net.Socket;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.*;
public class PortTalkApp{
public static void main(String args[]){
portTalk portTalk=new portTalk(args);
portTalk.displayDestinationParameters();
portTalk.displayLocalParameters();
portTalk.chat();
portTalk.shutdown();
}
}
class portTalk{
Socket connection;
DataOutputStream outStream;
DataInputStream inStream;
public portTalk(String args[]){
if(args.length!=2) error("Usage: java PortTalkApp host port");
String destination=args[0];
int port=0;
try{
port=Integer.valueOf(args[1]).intValue();
}catch(NumberFormatException ex){ error("Invalid port Number");}
try{
connection=new Socket(destination,port);
}catch(UnknownHostException ex) {error("Unknown Host");}
catch(IOException ex) {error("Invalid port Number");}
try{
inStream=new DataInputStream(connection.getInputStream());
outStream=new DataOutputStream(connection.getOutputStream());
}catch(IOException ex) {error("IO error getting streams");}
System.out.println("Connected to "+destination+" at "+port+".");
}
public void displayDestinationParameters(){
InetAddress destAddress=connection.getInetAddress();
String name=destAddress.getHostName();
byte ipAddress[]=destAddress.getAddress();
int port=connection.getPort();
displayParameters("Destination ",name,ipAddress,port);
}
public void displayLocalParameters(){
InetAddress localAddress=null;
try{
localAddress=InetAddress.getLocalHost();
}catch(UnknownHostException ex) {error("Error getting local Host information");}
String name= localAddress.getHostName();
byte ipAddress[]=localAddress.getAddress();
int port=connection.getLocalPort();
displayParameters("Local ",name,ipAddress,port);
}
public void displayParameters(String s,String name,byte ipAddress[],int port){
System.out.println(s+" host is "+name+".");
System.out.println(s+" IP Address is ");
for(int i=0;i<ipAddress.length;++i)
System.out.print((ipAddress[i]+256)%256+".");
System.out.println();
System.out.println(s+" port Number is "+port+".");
}
public void chat(){
DataInputStream keyboardInput=new DataInputStream(System.in);
boolean finished=false;
do{
try{
System.out.print("Send, receive, or quit (S/R/Q: ");
System.out.flush();
String line=keyboardInput.readLine();
if(line.length()>0){
line=line.toUpperCase();
switch(line.charAt(0)){
case 'S':
String sendLine=keyboardInput.readLine();
outStream.writeBytes(sendLine);
outStream.write(13);
outStream.write(10);
outStream.flush();
break;
case 'R':
int inByte;
System.out.println("***");
while((inByte=inStream.read())!='\n')
System.out.write(inByte);
System.out.println();
break;
case 'Q':
finished=true;
break;
default:
break;
}
}
}catch(IOException ex) {error("Error reading from keyboard or socket");}
}while(!finished);
}
public void shutdown(){
try{
connection.close();
}catch(IOException ex) {error("IO error closing socket");}
}
public void error(String s){
System.out.println(s);
System.exit(1);
}
}