Client

import java.io.*;
import java.net.*;
public class TalkClient {
public static void main(String args[]) {
    try{
        Socket socket=new Socket("127.0.0.1",4900);
        //向本机的4700端口发出客户请求
        BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
        //由系统标准输入设备构造BufferedReader对象
        PrintWriter os=new PrintWriter(socket.getOutputStream());
        //由Socket对象得到输出流,并构造PrintWriter对象
        BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
        //由Socket对象得到输入流,并构造相应的BufferedReader对象
        String readline;
        readline=sin.readLine(); //从系统标准输入读入一字符串
        while(!readline.equals("bye")){
            //若从标准输入读入的字符串为 "bye"则停止循环
            os.println(readline);
            //将从系统标准输入读入的字符串输出到Server
            os.flush();
            //刷新输出流,使Server马上收到该字符串
            System.out.println("Client:"+readline);
            //在系统标准输出上打印读入的字符串
            System.out.println("Server:"+is.readLine());
            //从Server读入一字符串,并打印到标准输出上
            readline=sin.readLine(); //从系统标准输入读入一字符串
        } //继续循环
        System.out.println("end");
        os.close(); //关闭Socket输出流
        is.close(); //关闭Socket输入流
        socket.close(); //关闭Socket
    }catch(Exception e){
        System.out.println("Error"+e); //出错,则打印出错信息
    }
}
}

单线程

Server

import java.io.*;
import java.net.*;
public class TalkServer{
public static void main(String args[]) {
    try{
        ServerSocket server=null;
        try{
            server=new ServerSocket(4900);
            //server = new Socket(InetAddress.getLocalHost(), 4900);
            //创建一个ServerSocket在端口4700监听客户请求
        }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 is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            //由Socket对象得到输入流,并构造相应的BufferedReader对象
            PrintWriter os=new PrintWriter(socket.getOutputStream());
            //由Socket对象得到输出流,并构造PrintWriter对象
            BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
            //由系统标准输入设备构造BufferedReader对象
            System.out.println("Client:"+is.readLine());
            //在标准输出上打印从客户端读入的字符串
            line=sin.readLine();
            //从标准输入读入一字符串
            while(!line.equals("bye")){
                //如果该字符串为 "bye",则停止循环
                os.println(line);
                //os.write(line.getBytes("ISO-8859-1"));
                //向客户端输出该字符串
                os.flush();
                //刷新输出流,使Client马上收到该字符串
                System.out.println("Server:"+line);
                //在系统标准输出上打印读入的字符串
                System.out.println("Client:"+is.readLine());
                //从Client读入一字符串,并打印到标准输出上
                line=sin.readLine();
                //从系统标准输入读入一字符串
            }//继续循环
            os.close(); //关闭Socket输出流
            is.close(); //关闭Socket输入流
            socket.close(); //关闭Socket
            server.close(); //关闭ServerSocket
        }catch(Exception e){
         System.out.println("ERROR"+e);
        //出错,打印出错信息
        }
    }
}

 

多线程

Server

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args){
        ServerSocket serverSocket=null;
        boolean listening=true;
        int clientnum = 0;
        try {
            serverSocket=new ServerSocket(9876);        
            //创建一个ServerSocket在端口7777监听客户请求

            while(listening){ //永远循环监听
                new ServerThread(serverSocket.accept(),clientnum).start();
                //监听到客户请求,根据得到的Socket对象和客户计数创建服务线程,并启动之
                clientnum++; //增加客户计数
                System.out.println(clientnum);
            }
            serverSocket.close(); //关闭ServerSocket
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}


class ServerThread extends Thread{
    Socket socket=null; //保存与本线程相关的Socket对象
    int clientnum; //保存本进程的客户计数
    
    public ServerThread(Socket socket,int num){ //构造函数
        this.socket=socket; //初始化socket变量
        clientnum=num+1; //初始化clientnum变量
    }
    public void run() { //线程主体
        try{
            //Socket socket=server.accept();
            //使用accept()阻塞等待客户请求,有客户
            //请求到来则产生一个Socket对象,并继续执行
            String line;
            BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            //由Socket对象得到输入流,并构造相应的BufferedReader对象
            PrintWriter os=new PrintWriter(socket.getOutputStream());
            //由Socket对象得到输出流,并构造PrintWriter对象
            BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
            //由系统标准输入设备构造BufferedReader对象
            System.out.println("Client:"+is.readLine());
            //在标准输出上打印从客户端读入的字符串
            line=sin.readLine();
            //从标准输入读入一字符串
            while(!line.equals("bye")){
                //如果该字符串为 "bye",则停止循环
                os.println(line);
                //向客户端输出该字符串
                os.flush();
                //刷新输出流,使Client马上收到该字符串
                System.out.println("Server:"+line);
                //在系统标准输出上打印读入的字符串
                System.out.println("Client:"+is.readLine());
                //从Client读入一字符串,并打印到标准输出上
                line=sin.readLine();
                //从系统标准输入读入一字符串
            }//继续循环
            os.close(); //关闭Socket输出流
            is.close(); //关闭Socket输入流
            socket.close(); //关闭Socket
        //    server.close(); //关闭ServerSocket
        }catch(Exception e){
            
        }
    }
}
posted on 2012-06-18 15:29  饭菜糖衣  阅读(184)  评论(0编辑  收藏  举报