java socket点对点以及点对面编程实例

和socket编程有关的几个类:
InetAddress
Socket:用在客户端
ServerSocket:用在服务器端
一。点对点通信
服务器端:
package server;


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

public class Server {
private int port;
public Server(int port){
    this.port=port;
    start();
}
//将从客户端收到的信息转化为大写的
public String process(String line){
    return line.toUpperCase();
}
public void start(){
    try{
        //根据端口创建套接字
        ServerSocket myscoket=new ServerSocket(port);
        //显示连接信息
        System.out.println("服务器启动完成,监听端口在"+port);
        System.out.println("正在等待客户连接.........");
        //挂起等待客户的请求
        Socket connection=myscoket.accept();
                //测试
                System.out.println("客户发来连接请求.........");
        //获取读取客户端的数据流
        BufferedReader in=new BufferedReader(new InputStreamReader(connection.getInputStream()));
        //获取写往客户端的数据输出流,true表示自动刷新
        PrintWriter out=new PrintWriter(connection.getOutputStream(),true);
        //向客户发送欢迎的信息
        out.println("您好,服务器连接成功!");
        out.println("输入bye断开与服务器的连接");
        boolean done=false;
        while(!done){
            //读取客户端的内容
            String line=in.readLine();
            if(line==null){
                done=true;
            }else{
                //从服务器端显示客户端发送的信息
                System.out.println("从客户端来的内容"+line);
                //信息处理
                String message=process(line);
                //向客户端发送信息
                out.println("从服务器端口发送的信息"+message);
                if(line.trim().equals("BYE"))
                    done=true;
            }
        }
        //关闭通信
        connection.close();
    }catch(Exception e){
        System.out.println(e);
    }   
}
}

package server;

public class ServerDemo {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
if(args.length!=1){
    System.out.println("运行方式:java Server <端口号>");
    return;
}
try{
    //获得端口号
    int port=Integer.parseInt(args[0]);
    Server myserver=new Server(port);
}catch(Exception e){
    System.out.println(e);
}
    }

}

客户端:
package client;
import java.io.*;
import java.net.*;
public class Client {
private String host;
private int port;
public Client(String host,int port){
    this.host=host;
    this.port=port;
    connect();   
}
public void connect(){
    try{
        Socket connection;
        if(host.equals("localhost"))
        {connection=new Socket(InetAddress.getLocalHost(),port);}
        else
          { connection=new Socket(InetAddress.getByName(host),port);}   
        //获得从键盘输入流
        BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));
        //获得服务器写内容的数据流
        PrintWriter out=new PrintWriter(connection.getOutputStream(),true);
        //获得接收服务器发送内容的输入流
        BufferedReader in=new BufferedReader(new InputStreamReader(connection.getInputStream()));
        //从服务器获得欢迎信息
        System.out.println("服务器信息:"+in.readLine());
        System.out.println("服务器信息:"+in.readLine());
        //提示用户输入
        System.out.print("请输入>");
        boolean done=false;
        while(!done){
            //从键盘上读取字符
            String line=stdin.readLine();
            //发送到服务端
            out.println(line);
            //如果读到bye则结束循环
            if(line.equalsIgnoreCase("bye"))
                done=true;
            //从服务器读取字符串
            String info=in.readLine();
            //显示从服务器发送来的数据
            System.out.println("服务器信息:"+info);
            //提示用户输入
            if(!done)
                System.out.print("请输入>");           
        }
        //关闭
        connection.close();
    }catch(SecurityException e){
        System.out.println("连接服务器出现安全问题!");
    }catch(IOException e){
        System.out.println("连接服务器出现I/O错误!");
    }
    }
}

package client;

public class ClientDemo {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
if(args.length!=2){
    System.out.println("程序运行方式:java client <服务器名称><端口号>");
    return;
}
String host=args[0];
try{
    int port=Integer.parseInt(args[1]);
    Client myserver=new Client(host,port);
}catch(Exception e){
    System.out.println(e);
}
    }

}
二。点对面通信
服务端:
package server;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server extends ServerSocket {
private int port;
//private Socket connection;
public Server(int port)throws IOException{
    super(port);
    this.port=port;
    System.out.println("服务器启动完成,监听端口在"+port);
    System.out.println("正在等待客户连接.....");
    try{
    while(true){
        //挂起,直到客户请求
        Socket connection=accept();
        //建立服务线程
        new ServerThread(connection,port);
    }
    }catch(IOException e){
        System.out.println(e);
    }finally{
        close();
    }
}
}
package server;


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

public class ServerThread extends Thread{
private int port;
private Socket connection;
private BufferedReader in;
private PrintWriter out;
public ServerThread(Socket s,int port)throws IOException{
    this.port=port;
    this.connection=s;
    //获取读取客户端的数据流
    // TODO Auto-generated method stub
if(args.length!=2){
    System.out.println("程序运行方式:java client <服务器名称><端口号>");
    return;
}
String host=args[0];
try{
    int port=Integer.parseInt(args[1]);
    Client myserver=new Client(host,port);
}catch(Exception e){
    System.out.println(e);
}
    }

}
二。点对面通信
服务端:
package server;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server extends ServerSocket {
private int port;
//private Socket connection;
public Server(int port)throws IOException{
    super(port);
    this.port=port;
    System.out.println("服务器启动完成,监听端口在"+port);
    System.out.println("正在等待客户连接.....");
    try{
    while(true){
        //挂起,直到客户请求
        Socket connection=accept();
        //建立服务线程
        new ServerThread(connection,port);
    }
    }catch(IOException e){
        System.out.println(e);
    }finally{
        close();
    }
}
}
package server;


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

public class ServerThread extends Thread{
private int port;
private Socket connection;
private BufferedReader in;
private PrintWriter out;
public ServerThread(Socket s,int port)throws IOException{
    this.port=port;
    this.connection=s;
    //获取读取客户端的数据流
     in=new BufferedReader(new InputStreamReader(connection.getInputStream

(),"gb2312"));
    //获取写往客户端的数据输出流,true表示自动刷新
     out=new PrintWriter(connection.getOutputStream(),true);
    //向客户发送欢迎的信息
    out.println("您好,服务器连接成功!");
    out.println("输入bye断开与服务器的连接");
    //启动线程
    start();
}
//将从客户端收到的信息转化为大写的
public String process(String line){
    return line.toUpperCase();
}
public void run(){
    try{
        boolean done=false;
        while(!done){
            String line=in.readLine();
            if(line==null)
                done=true;
            else{
                                if(line.trim().equals("bye"))
                    done=true;
                System.out.println("从客户端来的内容"+line);
                String message=process(line);
                out.println("从服务器端口发出的内容"+message);           

   
            }
        }
System.out.println("bye bye!");
        //关闭通信
        connection.close();
    }catch(Exception e){
        System.out.println(e);
    }   
}
}
package server;

public class ServerDemo {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
if(args.length!=1){
    System.out.println("运行方式:java Server <端口号>");
    return;
}
try{
    //获得端口号
    int port=Integer.parseInt(args[0]);
    Server myserver=new Server(port);
}catch(Exception e){
    System.out.println(e);
}
    }

}
客户端:
package client;
import java.io.*;
import java.net.*;
public class Client {
private String host;
private int port;
public Client(String host,int port){
    this.host=host;
    this.port=port;
    connect();   
}
public void connect(){
    try{
        Socket connection;
        if(host.equals("localhost"))
            connection=new Socket(InetAddress.getLocalHost(),port);
        else
           connection=new Socket(InetAddress.getByName(host),port);   
        //获得从键盘输入流
        BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));
        //获得服务器写内容的数据流
        PrintWriter out=new PrintWriter(connection.getOutputStream(),true);
        //获得接收服务器发送内容的输入流
        BufferedReader in=new BufferedReader(new InputStreamReader(connection.getInputStream()));
        //从服务器获得欢迎信息
        System.out.println("服务器信息:"+in.readLine());
        System.out.println("服务器信息:"+in.readLine());
        //提示用户输入
        System.out.print("请输入>");
        boolean done=false;
        while(!done){
            //从键盘上读取字符
            String line=stdin.readLine();
            //发送到服务端
            out.println(line);
            //如果读到bye则结束循环
            if(line.equalsIgnoreCase("bye"))
                done=true;
            //从服务器读取字符串
            String info=in.readLine();
            //显示从服务器发送来的数据
            System.out.println("服务器信息:"+info);
            //提示用户输入
            if(!done)
                System.out.print("请输入>");           
        }
        //关闭
文章出处:DIY部落(http://www.diybl.com/course/3_program/java/javashl/20081011/150076_2.html)

文章出处:file:///C:/Documents%20and%20Settings/pyh/Local%20Settings/Temp/Rar$EX02.250/java_socket2.htm

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值