- 浏览: 1252239 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (399)
- 心情故事 (12)
- java (115)
- linux (55)
- 关系型数据库 (35)
- struts,jsf,spring (11)
- jdbc,hibernate,ibatis (11)
- jsp,jstl,c:tag,标签库 (2)
- ejb,webservice (1)
- tomcat,jboss,jetty,weblogic,websphere (15)
- java网络编程 (6)
- java线程 (0)
- js,jquery,json,xml,dom,html.regex (25)
- 设计模式 (6)
- BUG记录 (2)
- ant (2)
- jsp,servlet (4)
- swing (6)
- lucene+nutch (6)
- log4j (2)
- windows doc (2)
- ruby (1)
- ruby on rails (3)
- 操作系统网络 (18)
- apache 错误 (1)
- tomcat (10)
- jboss (9)
- jetty (9)
- weblogic (9)
- websphere (10)
- apache (2)
- AIX的iostat命令查看系统磁盘的使用情况 (1)
- oracle 统计一个表格有多少列 (1)
- Exception in thread "main" java.security.KeyStoreException: Windows-MY not found (1)
- jsp (1)
- jstl (1)
- c:tag (1)
- 标签库 (1)
- struts (1)
- jsf (1)
- spring (2)
- oracle,sqlplus (2)
- sqlplus (2)
- show errors (1)
- proc (1)
- function (1)
- ORA-06544: PL/SQL: internal error (1)
- arguments: [55916] (1)
- [] (7)
- 终端身份实施文档 (1)
- 重装系统之后飞鸽传书只能看到自己 (1)
- vsftp "上传 553 Could not create file" (1)
- startWebLogic.sh启动失败,提示Error initializing Embedded LDAP Server (1)
- java agent 注册为 windows 服务 (1)
- centos (1)
- svn (1)
- apr (1)
- apr-util (1)
- activemq (2)
- oracle (5)
- mysql (3)
- nosql (3)
- NSIS (1)
- windows wmic (1)
- c 指针 (1)
- c c++ (0)
- jmeter (0)
- 性能测试 (0)
- linux,备份 (2)
- C++ ,Virtual (1)
- windows dos (1)
- android (2)
- 大数据,云计算 (1)
- JVM垃圾收集 (1)
- jdbc (2)
- invoke (1)
- hibernate (1)
- ibatis (1)
- 个人开源项目源码收藏 (1)
- 批处理 (1)
- Mongodb mapreduce (8)
- kettle (1)
- Mongodb capped (1)
- mongodb gridfs (1)
- Mongodb 入门基础知识 (1)
- mongodb (8)
- hadoop2.5.1 (1)
- hadoop (4)
- eclipse (1)
- hdfs fs (1)
- elipse hadoop plugin (1)
- PHP相关知识 (1)
- js (1)
- jquery (1)
- json (1)
- xml (1)
- dom (1)
- html.regex (1)
- 网络知识 (1)
- nginx (1)
- docker (1)
- 测试 (1)
- nodejs (1)
- iptables (1)
- linux gitlab (1)
最新评论
-
July01:
最近了解到一款StratoIO打印控件,功能如下:1、Html ...
web页面调用window.print()函数实现打印的功能 -
hxdtech:
非常感谢!
我在学习ibatis时的培训ppt -
zmwxiaoming:
what 能连数据库不错
SOLR的学习整理 -
springdata_springmvc:
java程序语言学习教程 地址http://www.zuida ...
java获取当前操作系统的信息 -
huanzei:
整理的不错,
oracle lpad函数
先看一段服务器端的代码:
package com.socket.test; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) { try { System.out.println("开始侦听请求。。。。"); ServerSocket serverSocket=new ServerSocket(3333);//服务器套接字 Socket clientSocket=null; while(true){ clientSocket=serverSocket.accept();//获得客户端的请求的Socket System.out.println("已侦听到了客户端的请求。。。。。"); new ServerThread(clientSocket); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
下面是ServerThread的代码:
package com.socket.test; 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 ServerThread extends Thread { private Socket socket; private InputStream clientInput; private OutputStream clientOutput; public ServerThread(Socket socket){ this.socket=socket; try { this.clientInput=socket.getInputStream(); this.clientOutput=socket.getOutputStream(); } catch (IOException e) { e.printStackTrace(); } this.start(); } @Override public void run() { System.out.println("this is child class's run method....."); BufferedReader breader=new BufferedReader(new InputStreamReader(clientInput)); try { String strLine=breader.readLine(); if("over".equalsIgnoreCase(strLine)){ PrintWriter printWriter=new PrintWriter(clientOutput,true); printWriter.println("over"); }else{ double side=Double.parseDouble(strLine); side=Double.parseDouble(strLine); System.out.println("Side of Square Received:"+side); double squareArea=side*side; String str="Side:"+side+"Square:"+squareArea; PrintWriter printWriter=new PrintWriter(clientOutput,true); printWriter.println(str); System.out.println("Finish sending to client..."); } clientInput.close(); clientOutput.close(); socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
这段代码主要作用:
1从构造函数中获得客户端的套接字请求,创建向客户端输入和输出的流。调用线程执行接下来的请求(this.start());
public ServerThread(Socket socket){ this.socket=socket; try { this.clientInput=socket.getInputStream(); this.clientOutput=socket.getOutputStream(); } catch (IOException e) { e.printStackTrace(); } this.start(); }
2通过bufferedReader获取客户端的输入并进行分析,假如是over,则向客户端输出over,并关闭,反之。则计算从客户端传来的数值,对应正方形的面积,并蒋结果返回到客户端。之后关闭。
if("over".equalsIgnoreCase(strLine)){ PrintWriter printWriter=new PrintWriter(clientOutput,true); printWriter.println("over"); }else{ double side=Double.parseDouble(strLine); side=Double.parseDouble(strLine); System.out.println("Side of Square Received:"+side); double squareArea=side*side; String str="Side:"+side+"Square:"+squareArea; PrintWriter printWriter=new PrintWriter(clientOutput,true); printWriter.println(str); System.out.println("Finish sending to client..."); }
注意PrintWriter的使用。。。。。。。。。
下面是客户端调用的代码:
package com.socket.test; 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; import java.net.UnknownHostException; public class Client { public static void main(String[] args) { try { System.out.println("开始发送请求。。。。"); Socket socket=new Socket("127.0.0.1",3333); BufferedReader bfReader=new BufferedReader(new InputStreamReader(System.in)); System.out.println("Please input the line....."); String strLine=bfReader.readLine(); OutputStream outputStream=socket.getOutputStream(); InputStream inputStream=socket.getInputStream(); PrintWriter pw=new PrintWriter(outputStream,true); pw.println(strLine); BufferedReader br=new BufferedReader(new InputStreamReader(inputStream)); System.out.println(br.readLine()); socket.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
代码分析:
Socket socket=new Socket("127.0.0.1",3333); BufferedReader bfReader=new BufferedReader(new InputStreamReader(System.in)); System.out.println("Please input the line....."); String strLine=bfReader.readLine();
建立与服务器的连接:
Socket socket=new Socket("127.0.0.1",3333);
构建缓从输入流:
BufferedReader bfReader=new BufferedReader(new InputStreamReader(System.in)); System.out.println("Please input the line....."); String strLine=bfReader.readLine();
获得服务器的输出和输入流:
OutputStream outputStream=socket.getOutputStream(); InputStream inputStream=socket.getInputStream();
把输入发送到服务器:
PrintWriter pw=new PrintWriter(outputStream,true); pw.println(strLine);
获得服务器的输出:
BufferedReader br=new BufferedReader(new InputStreamReader(inputStream)); System.out.println(br.readLine());
这里的
PrintWriter pw=new PrintWriter(outputStream,true); pw.println(strLine);
代码用outputStream我理解的是服务器的输出流对应的就是客户端的输入流,所以客户端发送到服务器端的数据就用outputStream,而获取服务器的输出则用inputStream,感觉这有点怪。不敢肯定是否对?
参考java API:
public class PrintWriter
向文本输出流打印对象的格式化表示形式。此类实现在 PrintStream
中的所有 print
方法。它不包含用于写入原始字节的方法,对于这些字节,程序应该使用未编码的字节流进行写入
PrintWriter
(File
file)
使用指定文件创建不具有自动行刷新的新 PrintWriter。 |
PrintWriter
(File
file,
String
csn)
创建具有指定文件和字符集且不带自动刷行新的新 PrintWriter。 |
PrintWriter
(OutputStream
out)
根据现有的 OutputStream 创建不带自动行刷新的新 PrintWriter。 |
PrintWriter
(OutputStream
out,
boolean autoFlush)
通过现有的 OutputStream 创建新的 PrintWriter。 |
PrintWriter
(String
fileName)
创建具有指定文件名称且不带自动行刷新的新 PrintWriter。 |
PrintWriter
(String
fileName,
String
csn)
创建具有指定文件名称和字符集且不带自动行刷新的新 PrintWriter。 |
PrintWriter
(Writer
out)
创建不带自动行刷新的新 PrintWriter。 |
|
发表评论
-
客户端套接字(Socket)超时
2009-06-25 16:44 6411客户端套接字的超时 ... -
socket学习笔记之五:socket构建多线程通信程序
2009-06-19 10:30 2172下面是原代码,比较简单的功能,提供个参考和入门学习。 1服 ... -
socket学习笔记四:简单的demo
2009-06-18 16:17 1958package test; import java.io ... -
java网络编程学习笔记之二 (服务器端侦听客户端请求)
2009-04-14 15:30 3409今天我学习java网络编程的第二步:服务器端如何来侦听客户 ... -
java网络编程学习笔记之一(TCP/IP协议与UDP协议的区别和认识)
2009-04-08 15:39 5295最近我想学习java网 ...
相关推荐
### JAVA学习笔记:Socket通信详解 #### 一、Socket通信概念与原理 Socket通信是Java网络编程中的核心概念,它提供了在不同计算机之间进行数据交换的能力。Socket可以被视为两个程序间进行通信的端点,一个Socket...
Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司的一部分)于1995年发布。...Java学习笔记涵盖了这些核心知识点,通过深入学习和实践,你可以逐步掌握Java编程,并应用于实际项目开发中。
【Java学习笔记Markdown版】是针对Java初学者和进阶者的一份详尽教程,以Markdown格式编写,便于阅读和整理。Markdown是一种轻量级的标记语言,它允许用户使用易读易写的纯文本格式编写文档,然后转换成结构化的HTML...
总结来说,这个学习笔记提供了一个使用Java Socket编程实现多线程服务器的示例,它演示了如何利用ExecutorService创建线程池来处理并发连接,是理解Java并发编程和网络通信的一个实用案例。虽然这是一个学习笔记,但...
《JAVA学习笔记》是林信良先生的一部深入浅出的Java编程教程,旨在帮助初学者和有一定经验的开发者巩固和提升Java编程技能。这本书涵盖了Java语言的基础到高级概念,是一份宝贵的自学资料。 首先,从基础部分开始,...
Java学习笔记-Scoket.pdf是关于Java编程语言中Socket编程的学习笔记,涵盖了Socket编程的基础知识、Java中Socket的使用、Socket通信的原理及应用等方面的内容。 Socket编程的基础知识 在Java编程语言中,Socket是...
5. **输入/输出**:Java的I/O流系统支持文件操作和网络通信,如FileReader、FileWriter、BufferedReader、BufferedWriter以及Socket、ServerSocket等类。 6. **字符串处理**:String类在Java中扮演重要角色,提供了...
3. **异常处理**:Java的异常处理机制是其强大的特性之一,学习笔记会讲解如何使用try-catch-finally语句块来捕获和处理程序运行时可能出现的错误。 4. **集合框架**:Java集合框架是存储和操作对象的重要工具,...
这份“Java JDK 6学习笔记”涵盖了从基础到高级的各种主题,是Java初学者和进阶者的重要参考资料。以下是笔记中可能包含的一些关键知识点: 1. **安装与配置**:介绍如何在不同操作系统(如Windows、Linux和Mac OS...
Socket通信主要基于两种协议:TCP(传输控制协议)和UDP(用户数据报协议)。TCP是一种面向连接的、可靠的传输协议,确保数据的顺序和完整性;而UDP是无连接的、不可靠的,速度快但不保证数据的到达。 3. **Socket...
Java面试题及学习笔记概述 Java作为一种广泛应用的编程语言,其面试题库广泛且深入,涵盖了从基础语法到高级特性的各个层面。本篇将基于常见的Java面试问题,结合学习笔记,深入探讨Java的核心概念和技术。 一、...
6. **输入/输出流**:Java提供了强大的I/O流系统,支持文件读写、网络通信和数据序列化等操作,如FileInputStream和FileOutputStream用于文件操作,Socket和ServerSocket用于网络编程。 7. **多线程**:Java内置了...
《良葛格JAVA 学习笔记》是由知名IT专家林信良,网名“良葛格”,在台湾大学电机工程学系的深厚学术背景基础上,结合其作为SUN教育训练中心讲师的丰富教学经验编写的。他的著作还包括《Spring 技术手册》,并且他...
《林信良Java学习笔记》是一本深受程序员喜爱的Java学习资源,尤其因其繁体字版,对于中文读者来说,提供了更为亲切的阅读体验。这本书深入浅出地讲解了Java编程语言的基础知识和高级特性,旨在帮助初学者快速掌握...
《良葛格java学习笔记》是一份集合了Java学习精华的资源,主要针对初学者和对Java编程感兴趣的读者。这份笔记是由用户从良葛格的网站上精心整理并转化为CHM格式,便于阅读和查阅。CHM(Compiled Help Manual)是微软...
这个压缩包中包含的"java学习笔记JDK6课件和课本代码"是学习JDK 6.0的重要参考资料,可以帮助你深入理解Java编程的核心概念和实践技巧。 1. **Java基础**:Java是一种面向对象的编程语言,它的基础包括类、对象、...
11. **网络编程**:Java的Socket和ServerSocket类可用于网络通信,实现客户端-服务器模式的应用。 12. **反射机制**:反射允许在运行时检查类的信息,创建和调用对象,是Java动态性的重要体现。 13. **泛型**:...
在网络编程方面,Java提供Socket编程接口,可以创建客户端和服务端进行通信。你会学习如何创建TCP和UDP套接字,实现数据的发送和接收。 多线程是Java的另一个强项。Java内置了对多线程的支持,通过Thread类和...
本学习笔记将带你深入理解这一领域,特别是通过Socket接口进行的网络通信。Socket是操作系统提供的一种通信机制,它允许应用程序创建并管理网络连接,进行数据传输。 **TCP/IP协议族** TCP/IP(Transmission ...
《林信良 jdk6 java学习笔记》是一本专注于Java编程语言的学习资料,特别针对Java Development Kit (JDK) 6版本进行了深入讲解。作者林信良是一位在Java领域有深厚造诣的专业人士,他的这部作品旨在帮助读者掌握Java...