java socket编程基础


1. [代码]读操作Runable

 1 package com.hrd.test.socket;
 2
 3 import java.io.BufferedReader;
 4 import java.io.IOException;
 5 import java.io.PrintWriter;
 6
 7 /**
 8  * 作者: ehomeud 创建于: 2015/4/15 13:15
 9  */
10 public class ReadThread implements Runnable {
11
12     private BufferedReader br;
13     private String sc;
14
15     public  ReadThread(BufferedReader br,String sc){
16         this.br=br;
17         this.sc =sc;
18     }
19     @Override
20     public void run() {
21         while (true){
22             try {
23                 String str = br.readLine();
24                 System.out.println(sc +":" +str);
25             } catch (IOException e) {
26                 e.printStackTrace();
27             }
28         }
29     }
30 }

2. [代码]写操作Runable

package com.hrd.test.socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * 作者: ehomeud 创建于: 2015/4/15 13:20
 */
public class WriteThread implements Runnable {

    private PrintWriter pw;
    private BufferedReader br;

    public WriteThread(PrintWriter pw, BufferedReader br) {
        this.pw = pw;
        this.br = br;
    }

    @Override
    public void run() {
        try {
            while (true) {
                pw.println(br.readLine());
                pw.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3. [代码]服务端ServerSocket

package com.hrd.test.socket;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 作者: ehomeud 创建于: 2015/4/15 10:00
 */
public class Server {

    public static int PORT = 9999;
    public static void main(String[] args) {
        ServerSocket s = null;
        Socket socket = null;
        BufferedReader br = null;
        PrintWriter pw = null;
        BufferedReader console=null;

        ExecutorService pool = Executors.newFixedThreadPool(2);
        try {
            //设置服务端通信端口
            s = new ServerSocket(PORT);
            System.out.println("ServerSocket Start:"+s);
            //等待请求,该方法会阻塞,直到获得请求
            socket = s.accept();
            System.out.println("Connection accept socket:"+socket);
            //用于接收客户端发来的请求
            br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            //用于发送返回信息,发送数据要调用.flush()方法
            pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
            console = new BufferedReader(new InputStreamReader(System.in));

            pool.submit(new ReadThread(br,"server"));
            pool.submit(new WriteThread(pw,console));
            while(true){
                Thread.sleep(10000);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            System.out.println("关闭中.....");
            try {
                console.close();
                br.close();
                pw.close();
                socket.close();
                s.close();
            } catch (Exception e2) {
            }
        }
    }
}

4. [代码]客户端Socket

package com.hrd.test.socket;

import java.io.*;
import java.net.Socket;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 作者: ehomeud 创建于: 2015/4/15 10:10
 */
public class Client {

    public static void main(String[] args) {
        Socket socket = null;
        BufferedReader br = null;
        PrintWriter pw = null;

        ExecutorService pool = Executors.newFixedThreadPool(2);
        try {
            //客户端socket指定服务器的地址和端口号
            socket = new Socket("127.0.0.1", Server.PORT);
            System.out.println("Socket:" + socket+"客户端启动中...");
            //同服务器原理一样
            br = new BufferedReader(new InputStreamReader(
                    socket.getInputStream()));
            pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(
                    socket.getOutputStream())));

            BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
            //提交读
            pool.submit(new WriteThread(pw,console));
            pool.submit(new ReadThread(br,"client"));
            while (true){
                Thread.sleep(100000);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                System.out.println("关闭中......");
                br.close();
                pw.close();
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}
时间: 2024-10-14 06:29:05

java socket编程基础的相关文章

Java Socket编程基础篇

原文地址:Java Socket编程----通信是这样炼成的 Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术.下面就让我们一起揭开Socket的神秘面纱. Socket编程 网络基础知识点: 两台计算机间进行通讯需要以下三个条件 IP地址.协议.端口号: IP地址:定位应用所在机器的网络位置.(比如家庭住址:北京市朝阳区XX街道XX小区) 端口号

java socket编程基础(转)

一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机. 而TCP层则提供面向应用的可靠(tcp)的或非可靠(UDP)的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的. 目前较为流行的网络编程模型是客户机/服务器(C/S)结构.即通信双方一方作为服务器等待客户提出请求并予以响应.客户则

Java Socket编程基础及深入讲解

Socket是Java网络编程的基础,了解还是有好处的, 这篇文章主要讲解Socket的基础编程.Socket用在哪呢,主要用在进程间,网络间通信.本篇比较长,特别做了个目录: 一.Socket通信基本示例 二.消息通信优化 2.1 双向通信,发送消息并接受消息 2.2 使用场景 2.3 如何告知对方已发送完命令 2.3.1 通过Socket关闭 2.3.2 通过Socket关闭输出流的方式 2.3.3 通过约定符号 2.3.4 通过指定长度 三.服务端优化 3.1 服务端并发处理能力 3.2

Java Socket编程基础(1)

参考资料: <Java网络编程精解> 孙卫琴 一.socket通信简介 什么是socket,简单来说,在linux系统上,进程与进程之间的通信称为IPC,在同一台计算机中,进程与进程之间通信可以通过信号.共享内存的方式等等. 不同计算机上的进程要进行通信的话就需要进行网络通信,而 socket通信就是不同计算机进程间通信中常见的一种方式,当然,同一台计算机也可以通过socket进行通信,比如mysql支持通过unix socket本地连接. socket在网络系统中拥有以下作用: (1) so

Java网络编程基础(六)— 基于TCP的NIO简单聊天系统

在Java网络编程基础(四)中提到了基于Socket的TCP/IP简单聊天系统实现了一个多客户端之间护法消息的简单聊天系统.其服务端采用了多线程来处理多个客户端的消息发送,并转发给目的用户.但是由于它是基于Socket的,因此是阻塞的. 本节我们将通过SocketChannel和ServerSocketChannel来实现同样的功能. 1.客户端输入消息的格式 username:msg    username表示要发送的的用户名,msg为发送内容,以冒号分割 2.实现思路 实现思路与Java网络

【Java】Java Socket编程(1)基本的术语和概念

计算机程序能够相互联网,相互通讯,这使一切都成为可能,这也是当今互联网存在的基础.那么程序是如何通过网络相互通信的呢?这就是我记录这系列的笔记的原因.Java语言从一开始就是为了互联网而设计的,它为实现程序的相互通信提供了许多有用API,这类应用编程接口被称为套接字(Socket).在开始学习Java Socket之前我们需要先来了解一下基本的术语和概念. 1.计算机网络 计算机网络由一组通过通信信道(Communication channel)相互连接的机器组成.这些机器被称为:主机(host

如何为可扩展系统进行Java Socket编程

从简单I/O到异步非阻塞channel的Java Socket模型演变之旅 上世纪九十年代后期,我在一家在线视频游戏工资工作,在哪里我主要的工作就是编写Unix Unix Berkley Socket和Windows WinSock代码.我的任务是确保视频游戏客户端和一个游戏服务器通信.很幸运有这样的机会写一些Java Socket代码,我对Java流式网络编程和简洁明了的API着迷.这一点都不让人惊讶,Java最初就是设计促进智能设备之间的通信,这一点很好的转移到了桌面应用和服务器应用. 19

Java网络编程和NIO详解开篇:Java网络编程基础

Java网络编程和NIO详解开篇:Java网络编程基础 计算机网络编程基础 转自:https://mp.weixin.qq.com/s/XXMz5uAFSsPdg38bth2jAA 我们是幸运的,因为我们拥有网络.网络是一个神奇的东西,它改变了你和我的生活方式,改变了整个世界. 然而,网络的无标度和小世界特性使得它又是复杂的,无所不在,无所不能,以致于我们无法区分甚至无法描述. 对于一个码农而言,了解网络的基础知识可能还是从了解定义开始,认识OSI的七层协议模型,深入Socket内部,进而熟练地

Java Socket编程

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