Java实现Socket通信

一对一通信:

服务器端:

public class ServerDemo {    public static void main(String[] args) {        ServerSocket serverSocket = null;        Socket socket = null;        BufferedReader reader = null;        try {            //设置服务端的端口号            serverSocket = new ServerSocket(8081);            //等待客户端发送请求            socket = serverSocket.accept();            //接收客户端发来的请求            reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));            boolean flag = true;            while (flag){                String read = reader.readLine();                if("结束".equals(read)){                    flag = false;                }                System.out.println("服务器接收消息:"+read);            }        } catch (IOException e) {            e.printStackTrace();        }finally {            try {                reader.close();                socket.close();                serverSocket.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }}

客户端:
public class ClientDemo {    public static void main(String[] args) {        Socket socket = null;        //使用PrintWriter时,调用println、print的方法时,可以不再调用flush方法进行刷新        PrintWriter writer = null;        try {            //客户端socket指定服务器的地址和端口号            socket = new Socket("127.0.0.1", 8081);            //发送消息到服务器            writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(                    socket.getOutputStream())));            for (int i = 0; i < 10; i++) {                writer.println("发送消息 " + i);            }            writer.println("结束");        } catch (Exception e) {            e.printStackTrace();        } finally {            try {                System.out.println("close......");                writer.close();                socket.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }}

多客户端通信服务端1:
public class ServerDouble {    public static void main(String[] args) {        ServerSocket serverSocket = null;        Socket socket = null;        try {            //设置服务端的端口号            serverSocket = new ServerSocket(8081);            //等待客户端发送请求            System.out.println("正在等待连接……");            while (true){                socket = serverSocket.accept();                System.out.println("连接上了:"+socket.getPort());                new ServerDoubleDemo(socket);            }        } catch (IOException e) {            e.printStackTrace();        }finally {            try {                socket.close();                serverSocket.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }}服务端2:
public class ServerDoubleDemo extends Thread {    Socket socket = null;    BufferedReader reader = null;    public ServerDoubleDemo(Socket socket) {        this.socket = socket;        try {            reader = new BufferedReader(new InputStreamReader( socket.getInputStream()));            start();        } catch (IOException e) {            e.printStackTrace();        }    }

@Override    public void run() {        try {            boolean flag = true;            while (flag){                String str = reader.readLine();                if("结束".equals(str)){                    flag = false;                }                System.out.println("接收消息:"+str);            }        } catch (IOException e) {            e.printStackTrace();        }finally {            try {                reader.close();                socket.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }}

客户端同上:
public class ClientDemo {    public static void main(String[] args) {        Socket socket = null;        //使用PrintWriter时,调用println、print的方法时,可以不再调用flush方法进行刷新        PrintWriter writer = null;        try {            //客户端socket指定服务器的地址和端口号            socket = new Socket("127.0.0.1", 8081);            //发送消息到服务器            writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(                    socket.getOutputStream())));            for (int i = 0; i < 10; i++) {                writer.println("发送消息 " + i);            }            writer.println("结束");        } catch (Exception e) {            e.printStackTrace();        } finally {            try {                System.out.println("close......");                writer.close();                socket.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }}
				
时间: 2024-08-28 03:43:30

Java实现Socket通信的相关文章

java NIO socket 通信实例

java Nio 通信与Bio通信主要不同点: 1.Nio中的单个channel即可支持读操作也可以支持写操作,而bio中读操作要用inputstream,写操作要outputstream. 2.nio 采用byteBuffer 作为内存缓存区,向channel里写或者度操作,bio基本是用byte[] 3.nio采用 selector组件轮询读取就绪channel 服务端demo代码: package com.my.socket3; import java.io.ByteArrayOutput

C++服务器与java进行socket通信案例

分类: [java]2012-10-08 12:03 14539人阅读 评论(46) 收藏 举报 注:本代码版权所有!!!转载时请声明源地址:http://blog.csdn.net/nuptboyzhb/article/details/8047619 你可以学习,分享,修改,教学等.但是不得用于商业目的.目前已经发现互联网上大量与本文完全相同的文章,但是却把作者信息删除的干干净净,并且据为己有,打上某培训机构的广告!实属可恶! 最新消息:项目成品连接:http://blog.csdn.net/

Java中Socket通信的知识回顾---学习笔记

两台计算机进行通信的基本前提: (1)IP地址: 每台计算机都有自己独一无二的IP地址,根据IP地址判断与哪台计算机进行通信. (2)端口号: 每个应用程序都有自己专属的端口,根据端口号判断与计算机中的哪个应用程序进行通信. 说明: <1>用于区分不同应用程序 <2>端口号的范围:0-65535,其中0-1023是为系统保留的端口号 <3>常用的协议的端口号: http:80 ftp:21 telnet:23 <4>IP地址+端口号=Socket,Socke

Java:Socket通信

Socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求.ServerSocket用于服务器端,Socket是建立网络连接时使用的.在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话.对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别.套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认. 实例一:

java的Socket通信例子及关于java.net.SocketException: Socket is closed错误

今天写socket数据相互通信的时候,碰到一个及其蛋疼的错误.单向传输数据的时候server与client是没有问题的,但是两个都有输入输出操作的时候就出现了这个问题 java.net.SocketException: Socket is closed: 下面附代码: Server: StringBuffer result = new StringBuffer(""); int port = 9090; //定义一个ServerSocket监听在端口9090上 ServerSocket

java利用socket通信模拟实现ARQ停止等待协议

---恢复内容开始--- 1//服务端,发送方 1 //客户端,接收方 2 3 import java.awt.*; 4 import java.io.*; 5 import java.net.*; 6 import java.util.*; 7 import javax.swing.*; 8 9 public class IClient extends JFrame { 10 JPanel jp = new JPanel(); 11 JTextArea jta = new JTextArea(

java udp socket通信(仅发送)

实现功能:客户端发送一个字符串(可以为汉字),服务器端接收并显示 服务器端程序: package udpServer; import java.io.*; import java.net.*; /** * 服务端 * 1.创建服务+端口 * 2.准备接受容器 byte数组 * 3.把接收容器封装成包 DatagramPacket * 4.接受数据 * 5.分析数据 */ public class server { public static void main(String[] args) th

JAVA ANDROID SOCKET通信检测(SERVER)连接是否断开

Pre 解决思路 代码后记: 客户端app上的部分代码 调用: 服务器上: 客户端判断服务器是否还活着代码: PRE 在利用socket写通讯程序的时候,想检测服务器是否还活着. 从网上找了很多资料,都没有自己合适的,最后自己想了个办法,不过也相当于截取了心跳检测的一部分. 这里检测的是远程server的连接,而不是本地是否连接成功.首先想到socket类的方法isClosed().isConnected().isInputStreamShutdown().isOutputStreamShutd

Java 和 Python 的 Socket 通信

网络上两个程序通过一个双向通讯连接实现数据的交换,这个双向链路的一端称为一个Socket.Socket支持的协议有多种,这里主要介绍基于 TCP/IP 协议族的 Socket 编程. 首先,IP协议族决定了socket的地址类型,在通信中必须采用对应的地址.AF_INET(AF 表示 Adress Family)表示要用 ipv4 地址(32位)与端口号(16位)的组合. 然后,根据传输协议又分为:流式 Socket(SOCK_STREAM) 和数据报式 Socket(SOCK_DGRAM):