Java Tcp协议socket编程学习
我学习到的主要步骤
第一步:以特定端口(如4800)新建socket对象第二步:以系统输入设备构造BufferedReader对象,该对象用于接收系统键盘输入的字符第三步:以socket对象 得到输出流来构造PrintWriter第四步:以socket对象得到输入流来构造相应的BufferedReader对象,该对象用于接收server端发送过来的信息
我理解到的关闭socket:先开的后关闭,socket最后关闭。
以下是客户端的代码实现:
package com.fan.socket;
import java.io.*;import java.net.Socket;
public class SocketClient {public static void main(String[] args) throws IOException{
try{Socket socket=new Socket('127.0.0.1',4800);System.out.println('client start ...');//向本机的4800端口发出客户请求BufferedReader br=new BufferedReader(new InputStreamReader(System.in));//由系统标准输入设备构造BufferedReader对象PrintWriter write=new PrintWriter(socket.getOutputStream());//由Socket对象得到输出流,并构造PrintWriter对象BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));//由Socket对象得到输入流,并构造相应的BufferedReader对象String readline;readline=br.readLine(); //从系统标准输入读入一字符串while(!readline.equals('end')){//若从标准输入读入的字符串为 'end'则停止循环write.println(readline);//将从系统标准输入读入的字符串输出到Server2write.flush();//刷新输出流,使Server马上收到该字符串System.out.println('Client:'+readline);//在系统标准输出上打印读入的字符串System.out.println('Server:'+in.readLine());//从Server读入一字符串,并打印到标准输出上readline=br.readLine(); //从系统标准输入读入一字符串} //继续循环write.close(); //关闭Socket输出流in.close(); //关闭Socket输入流 socket.close(); //关闭Socket }catch(Exception e) {System.out.println('can not listen to:'+e);//出错,打印出错信息}}
}
服务端代码实现:
package com.fan.socket;
import java.io.*;import java.net.ServerSocket;import java.net.Socket;
public class SocketService {public static void main(String[] args) throws IOException{SocketService socketService = new SocketService();socketService.oneServer();}public void oneServer(){try{ServerSocket server=null;try{server=new ServerSocket(4800);System.out.println('server start is ok...');//创建一个ServerSocket在端口4800监听客户请求}catch(Exception e) {System.out.println('can not listen to:'+e);//出错,打印出错信息}Socket socket=null;try{socket=server.accept();//使用accept()阻塞等待客户请求,有客户//请求到来则产生一个Socket对象,并继续执行}catch(Exception e) {System.out.println('Error.'+e);//出错,打印出错信息}String line;BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));//由Socket对象得到输入流,并构造相应的BufferedReader对象PrintWriter writer=new PrintWriter(socket.getOutputStream());//由Socket对象得到输出流,并构造PrintWriter对象BufferedReader br=new BufferedReader(new InputStreamReader(System.in));//由系统标准输入设备构造BufferedReader对象System.out.println('Client:'+in.readLine());//在标准输出上打印从客户端读入的字符串line=br.readLine();//从标准输入读入一字符串while(!line.equals('end')){//如果该字符串为 'end',则停止循环writer.println(line);//向客户端输出该字符串writer.flush();//刷新输出流,使Client马上收到该字符串System.out.println('Server:'+line);//在系统标准输出上打印读入的字符串System.out.println('Client:'+in.readLine());//从Client读入一字符串,并打印到标准输出上line=br.readLine();//从系统标准输入读入一字符串} //继续循环writer.close(); //关闭Socket输出流in.close(); //关闭Socket输入流socket.close(); //关闭Socketserver.close(); //关闭ServerSocket}catch(Exception e) {//出错,打印出错信息System.out.println('Error.'+e);}}}
相关文章: