Java --socket双向通信

如下例子实现了利用socket简易双向通信的例子

1.建立两个java project,目录如下

2.客户端代码

package client;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;

public class Client {
    
    public static void main(String args[])
    {
        try{
            //创建客户端套接字
            Socket socket = new Socket("127.0.0.1", 9999);
            //获取套接字输入流
            InputStream is = socket.getInputStream();
            DataInputStream dis = new DataInputStream(is);
            //获取套接字输出流
            OutputStream os = socket.getOutputStream();
            DataOutputStream dos = new DataOutputStream(os);
            
            //从键盘输入
            InputStreamReader isr = new InputStreamReader(System.in);
            BufferedReader br = new BufferedReader(isr);
            
            //聊天
            String message;
            while (true) {
                //读取键盘输入的字符,写到客户端输出流
                message = br.readLine();
                dos.writeUTF(message);
                if(message.equals("88"))
                    break;
                //读取服务器端的数据并打印到屏幕上
                message = dis.readUTF();
                System.out.println("服务器传回的消息:"+message);
            }
            //关闭流
            dis.close();
            dos.close();
            socket.close();
            
        }catch(Exception e)
        {
            e.printStackTrace();
        }
    }

}

3.服务器端代码

package server;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String args[])
    {
        try {
            //创建一个ServerSocket,在端口号9999上监听客户端请求
            ServerSocket serverSocket = new ServerSocket(9999);
            Socket socket = serverSocket.accept();
            
            //获取客户端套接字的输出流
            OutputStream os = socket.getOutputStream();
            DataOutputStream dos = new DataOutputStream(os);
            
            //获取客户端输入流
            InputStream is = socket.getInputStream();
            DataInputStream dis = new DataInputStream(is);
            
            //创建字符输入流接受键盘输入
            InputStreamReader isr= new InputStreamReader(System.in);
            BufferedReader br= new BufferedReader(isr); 
            
            //消息
            String message;
            while (true) {
                //获取客户端输入流
                message = dis.readUTF();
                System.out.println("客户端发过来消息:"+message);
                if(message.equals("88"))
                    break;
                //读取键盘输入并写入到输出流
                message = br.readLine();
                dos.writeUTF(message);
            }
            
            dis.close();
            dos.close();
            serverSocket.close();
            socket.close();

        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        
    }
}

4.调试

1>服务器端项目 Run as-->Java Application,可以打个log看下启动成功。

2>客户端项目 Run as-->Java Application,可以打个log看下启动成功。客户端运行起来后会覆盖服务端的log。

3>先将控制权调到客户端这边,即用鼠标点击客户端main方法,在控制台(console)里面输入客户端需要发送的消息,回车键即可发送。

此时控制台会输出消息客户端发过来消息:xxxxxxx(这是你自己输入的消息)

4>将控制权调到服务器这边,即用鼠标点击服务器端main方法,在控制台(console)里面输入服务器端需要发送的消息,回车键即可发送。

如下是调试截图

4.1 客户端输入,还未回车

4.2 客户端点击了回车键,服务器端收到的消息

4.3 接着,服务器端回消息

4.4 客户端再发消息

至此,完成了简单的即时通讯。

时间: 2024-08-05 11:26:20

Java --socket双向通信的相关文章

【转】Java Socket编程

原文地址:Java Socket编程 Java Socket编程 对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket.服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了.首先ServerSocket将在服务端监听某个端口,当发现客户端有Socket来试图连接它时,它会accept该Socket的连接请求,同时在服务端建立一个对应的Socket与之进行通信.这样就有两个Socket了,客户端和服务端各一个. 对于Socket之间的通

JAVA Socket 编程学习笔记(二)

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

项目日志之基于Java socket的网络通讯

Java API网络类包中的Socket类是网络上运行的两个程序间双向通信的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上数据的传递.我们打算通过Java中基于Socket的网络编程实现一个简单的网络通信程序.这就是我们团队项目(开发一款简单的通讯软件,其基本功能是实现一对一的网络信息通讯,并努力向一对多和多对多靠近)的主要内容. 一.Java socket通信开发原理(查阅资料): 服务器使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端

Java Socket编程详细解说

Java Socket编程 JavaSocketServerSocket乱码超时 Java Socket编程 对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket.服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了.首先ServerSocket将在服务端监听某个端口,当发现客户端有Socket来试图连接它时,它会accept该Socket的连接请求,同时在服务端建立一个对应的Socket与之进行通信.这样就有两个Socket了,客户

JAVA SOCKET 技术

java socket 技术分为服务端socket:ServerSocket 和客户端socket:Socket ServerSocket与Socket 的建立通信方式: 服务端: 1.ServerSocket 监听端口.调用accept()创建一个Socket,并等待客户端的连接 2.获取socket的InputStream ,并从中读取客户端发送过来的数据 客户端: 1.创建一个指定IP,端口的socket,获取socket的OutputStream输出流 2.向输出流写数据,然后flush

java socket编程实例代码讲解

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

java socket通信-传输文件图片--传输图片

ClientTcpSend.java   客户端发送类 package com.yjf.test; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.net.InetSocketAddress; import java.net.Socket; public class ClientTcpSend { public static String clien

java socket 的参数选项解读(转)

java socket中有很多参数可以选择,这篇博客的目的是沉淀出这些参数的语义和用法,供自己以后查阅. 1.java socket参数选项总览 在JDK1.6中有如下参数选项: 1 public final static int TCP_NODELAY = 0x0001; 2 3 public final static int SO_BINDADDR = 0x000F; 4 5 public final static int SO_REUSEADDR = 0x04; 6 7 public fi

Java Socket编程

对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket.服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了.首先ServerSocket将在服务端监听某个端口,当发现客户端有Socket来试图连接它时,它会accept该Socket的连接请求,同时在服务端建立一个对应的Socket与之进行通信.这样就有两个Socket了,客户端和服务端各一个. 客户端写服务端读 服务端代码 public class Server { public s