Java Socket 示例01

Server 端代码:

package ServerSide;

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

public class EchoServer {

    private int port = 8088;
    private ServerSocket serverSocket;

    public EchoServer() {

        try {
            serverSocket = new ServerSocket(port);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public String echo(String msg) {

        return "echo: " + msg;
    }

    private PrintWriter getWriter(Socket socket) {

        OutputStream socketOut = null;
        try {
            socketOut = socket.getOutputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return new PrintWriter(socketOut, true);
    }

    private BufferedReader getReader(Socket socket) {

        InputStream socketIn = null;
        try {
            socketIn = socket.getInputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return new BufferedReader(new InputStreamReader(socketIn));
    }

    public void service() {

        while(true) {
            Socket socket = null;
            try {
                socket = serverSocket.accept();
                System.out.println("New connection accepted " + socket.getInetAddress() + ":" + socket.getPort());

                BufferedReader br = getReader(socket);
                PrintWriter pw = getWriter(socket);

                String msg = null;
                while((msg = br.readLine()) != null) {
                    System.out.println(msg);
                    pw.println(echo(msg));
                    if(msg.equals("bye"))
                        break;
                }
            }
            catch (IOException e) {
                e.printStackTrace();
            }
            finally {
                try {
                    if(socket != null) {
                        socket.close();
                    }
                }
                catch (IOException e) {
package ClientSide;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;

public class EchoClient {

    private static String host = "10.11.121.239";
    private static int port = 8088;
    private Socket socket;

    public EchoClient(String hostname) {

        host = hostname;
        try {
            socket = new Socket(host, port);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public EchoClient() {

        this(host);
    }

    private PrintWriter getWriter(Socket socket) {

        OutputStream socketOut = null;
        try {
            socketOut = socket.getOutputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return new PrintWriter(socketOut, true);
    }

    private BufferedReader getReader(Socket socket) {

        InputStream socketIn = null;
        try {
            socketIn = socket.getInputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return new BufferedReader(new InputStreamReader(socketIn));
    }

    public void talk() {

        try {
            BufferedReader br = getReader(socket);
            PrintWriter pw = getWriter(socket);

            BufferedReader localReader = new BufferedReader(new InputStreamReader(System.in));
            String msg = null;
            while((msg = localReader.readLine()) != null) {
                pw.println(msg);
                System.out.println(br.readLine());

                if(msg.equals("bye"))
                    break;
            }
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        finally {
            try {
                socket.close();
            }
            catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {

        new EchoClient().talk();
    }
}

                    e.printStackTrace();
                }
            }
        }
    }

    public static void main(String[] args) throws IOException {

        new EchoServer().service();
    }
}

Client 代码:

时间: 2024-11-14 12:01:40

Java Socket 示例01的相关文章

java socket编程实例代码讲解

1.所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答网络请求. 操作java socket时用到的最多的三个方法为: accept():主要用于服务器端产生"阻塞",等待客户端的链接请求,并且返回一个客户端的Socket实例: getInputStream():方法主要用来获得网络连接输入,同时返回一个InputStream对象实例: getOutputStream

Java Socket探究

本文转自 拿客 Java中的Socket可以分为普通Socket和NioSocket两种. 普通Socket的用法 Java中的网络通信是通过Socket实现的,Socket分为ServerSocket和Socket两大类,ServerSocket用于服务端,可以通过accept方法监听请求,监听到请求后返回Socket,Socket用于具体完成数据传输,客户端直接使用Socket发起请求并传输数据. 一个简单的交互介绍ServerSocket及Socket的使用: 1. 创建ServerSoc

Java 集合系列 01 总体框架

java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java 集合系列 04 LinkedList详细介绍(源码解析)和使用示例 Java集合是java提供的工具包,包含了常用的数据结构:集合.链表.队列.栈.数组.映射等.Java集合工具包位置是java.util.*Java集合主要可以划分为4个部分:List列表.Set集合.Map映射.工具类(Itera

入门级的Java Socket代码

在男友手把手的指导下,写出第一个类似于"hello world"的socket程序. 男友要求: 1. 程序以命令行方式运行,在两台联网的电脑上分别运行: 2. 一台电脑的命令行中输入"程序名称 wait",运行程序,进入监听状态: 3. 一台电脑的命令行中输入"程序名称 ip地址",运行程序,连接另一台电脑: 4. 两台电脑均可发送接收消息. 分析流程图: 附代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1

JAVA Socket超时浅析(转)

套接字或插座(socket)是一种软件形式的抽象,用于表达两台机器间一个连接的“终端”.针对一个特定的连接,每台机器上都有一个“套接字”,可以想象它们之间有一条虚拟的“线缆”.JAVA有两个基于数据流的套接字类:ServerSocket,服务器用它“侦听”进入的连接:Socket,客户端用它初始一次连接.侦听套接字只能接收新的连接请求,不能接收实际的数据包. 套接字是基于TCP/IP实现的,它是用来提供一个访问TCP的服务接口,或者说套接字socket是TCP的应用编程接口API,通过它应用层就

java socket小结

Java socket相对与C来说,封装性更好,所以使用上面比较简洁.服务端方面,需要一个ServerSocket对象,开启监听,利用服务端获取的链接服务端的socket对象,构建输入流和输出流,输入流是InputStream input,向上封装后是InputStreamReader inputreader,InputStreamReader对象向上封装后是BufferedReader对象.BufferedReader对象用来获取客户端发送给服务端的信息,输出流对象是OutputStream

java io系列01之 "目录"

javaIO系列转载出处:http://www.cnblogs.com/skywang12345/p/io_01.html 该分类所有博文,均转载同一作者,后边不再累赘标名. java io 系列目录如下: 01. java io系列01之  "目录" 02. java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括InputStream) 03. java io系列03之 ByteArrayOutputStream的简介,源码分析和示例(包括Ou

JAVA Socket 编程学习笔记(二)

在上一篇中,使用了 java Socket+Tcp/IP  协议来实现应用程序或客户端--服务器间的实时双向通信,本篇中,将使用 UDP 协议来实现 Socket 的通信. 1. 关于UDP UDP协议(用户数据报协议)是无连接的.不可靠的.无序的,速度快,进行数据传输时,首先将要传输的数据定义成数据报(Datagram),大小限制在64k,在数据报中指明数据索要达到的Socket(主机地址和端口号),然后再将数据报发送出去,Java 对UDP 协议通信提供了两个主要的类,DatagramPac

JAVA Socket 底层是怎样基于TCP/IP 实现的???

首先必须明确:TCP/IP模型中有四层结构:       应用层(Application Layer).传输层(Transport  Layer).网络层(Internet Layer  ).链路层(LinkLayer)  其中Ip协议(Internet Protocol)是位于网络层的,TCP协议时位于传输层的.通过Ip协议可以使可以使两台计算机使用同一种语言,从而允许Internet上连接不同类型的计算机和不同操作系统的网络.Ip协议只保证计算机能够接收和发送分组数据. 当计算机要和远程的计