1. [代码]读操作Runable

 1 package com.hrd.test.socket;

 import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter; /**
* 作者: ehomeud 创建于: 2015/4/15 13:15
*/
public class ReadThread implements Runnable { private BufferedReader br;
private String sc; public ReadThread(BufferedReader br,String sc){
this.br=br;
this.sc =sc;
}
@Override
public void run() {
while (true){
try {
String str = br.readLine();
System.out.println(sc +":" +str);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

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();
}
}
} }

java socket编程基础的更多相关文章

  1. Java Socket编程基础篇

    原文地址:Java Socket编程----通信是这样炼成的 Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Sock ...

  2. java socket编程基础(转)

    一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...

  3. 【转】Java Socket编程基础及深入讲解

    原文:https://www.cnblogs.com/yiwangzhibujian/p/7107785.html#q2.3.3 Socket是Java网络编程的基础,了解还是有好处的, 这篇文章主要 ...

  4. 【Socket】Java Socket编程基础及深入讲解

    Socket是Java网络编程的基础,了解还是有好处的, 这篇文章主要讲解Socket的基础编程.Socket用在哪呢,主要用在进程间,网络间通信.本篇比较长,特别做了个目录: 一.Socket通信基 ...

  5. Java Socket编程基础(1)

    参考资料: <Java网络编程精解> 孙卫琴 一.socket通信简介 什么是socket,简单来说,在linux系统上,进程与进程之间的通信称为IPC,在同一台计算机中,进程与进程之间通 ...

  6. Java Socket编程基础及深入讲解

    原文链接:https://www.cnblogs.com/yiwangzhibujian/p/7107785.html 原文写的特别好,非常详细,但是禁止转载,那我就不再复制粘贴了! socket实现 ...

  7. Java基础:三步学会Java Socket编程

    Java基础:三步学会Java Socket编程 http://tech.163.com 2006-04-10 09:17:18 来源: java-cn 网友评论11 条 论坛        第一步 ...

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

    从简单I/O到异步非阻塞channel的Java Socket模型演变之旅 上世纪九十年代后期,我在一家在线视频游戏工资工作,在哪里我主要的工作就是编写Unix Unix Berkley Socket ...

  9. Java网络编程基础(Netty预备知识)

    今天在家休息,闲来无事,写篇博客,陶冶下情操~~~ =================我是分割线================ 最近在重新学习Java网络编程基础,以便后续进行Netty的学习. 整 ...

随机推荐

  1. jQuery新的事件绑定机制on()

    浏览jQuery的deprecated列表,发现live()和die()在里面了,赶紧看了一下,发现从jQuery1.7开始,jQuery引入了全新的事件绑定机制,on()和off()两个函数统一处理 ...

  2. Long和Date数据类型之间相互转换代码 - 调整时间推前往后,截取long型日期方法。

    SimpleDateFormat DATETIME_SEC_STR = new SimpleDateFormat("yyyyMMddHHmmss"); SimpleDateForm ...

  3. Sqli-labs less 19

    Less-19 从源代码中我们可以看到我们获取到的是HTTP_REFERER 那和less18是基本一致的,我们从referer进行修改. 还是像less18一样,我们只给出一个示例 将referer ...

  4. 修改MySQL数据库的密码

    通过MySQL命令行,可以修改MySQL数据库的密码,下面就为您详细介绍该MySQL命令行,如果您感兴趣的话,不妨一看. 格式:mysql -u用户名 -p旧密码 password 新密码 1.给ro ...

  5. 解决Flash和html在多标签浏览器中互访问题

    在Flash播放器运行时,将不同来源的资源划分到独立的沙箱(sandbox)内,不同沙箱之间不能 彼此操作数据(除非目标沙箱做过一些设置,授权其他沙箱可访问),这就是Flash的跨沙箱问题.当Flas ...

  6. JSP-declareAndOutput

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1" errorPag ...

  7. ZOJ3229 Shoot the Bullet(有源汇的上下界最大流)

    #pragma warning(disable:4996) #include <iostream> #include <cstring> #include <string ...

  8. iOS导航栏-导航栏透明

    设置一张透明图片:nav_bargound.png  //导航栏背景     [self.navigationController.navigationBar setBackgroundImage:[ ...

  9. Mime Types

    Mime Types 1.http://www.freeformatter.com/mime-types-list.html 2.http://www.webmaster-toolkit.com/mi ...

  10. Android安卓开发环境搭建详细教程

    安装目录:步骤1 安装JDK步骤2 安装 Android SDK ----http://www.androiddevtools.cn/ 步骤3 安装Tomcat步骤4 安装Ant步骤5 安装Eclip ...