- 浏览: 452363 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
July01:
最近了解到一款StratoIO打印控件,功能如下:1、Html ...
JS操作XMLDOM(遍历和打印) -
lliiqiang:
我这边只要出现图表组件就报告2032号错误。
Flex 出现 Error #2032 是什么意思 -
全保生:
感谢!方法一:(已确认 可行)String username ...
jsp 的url传参中文乱码问题解决办法 -
dy804731771:
谢谢您的分享,对我有帮助
兼容的带样式的INPUT -
huang305585796:
火影头像好屌
FusionCharts统计图导出为图片或pdf
>>Socket相关的理解:
1>TCP:拨电话后和对方谈话 对应特点:有连接,安全(对方一定收到了且自己说什么对方听到的就是什么)。
UDP:写信给对方 对应特点:无连接,但对方不一定收到,收到了数据也不一定完整。
DNS:域名服务(每个域名对一个一个IP)。
2>比喻和对比
Socket:电话机 IP:电话号码 端口:分机号。
3>返回本地IP地址的三种方式:
InetAddress.getByName("localhost") ; InetAddress.getByName("127.0.0.1") (属于回路地址) ; InetAddress.getByName(null) ;
4>服务器端和客户端的功能
服务器端:开辟端口 提供服务;
客户端:指定服务器端和端口,获取服务。
>>一个简单的客户端/服务器端(Client/Server)的数据读写
Server服务器端代码:
import java.net.*;
import java.io.*;
class ServerrSocket
{
public static void main(String[] args)
{
server();
}
public static void server()
{
try{
ServerSocket ss = new ServerSocket(6000);//指定6000端口提供服务;
System.out.println("服务器端启动...");
Socket s = ss.accept(); //采取侦听的方法,随时接受客户端Client的请求
OutputStream os = s.getOutputStream(); //根据客户端Client创建输出流对象
InputStream is = s.getInputStream(); //根据客户端Client创建输入流对象
os.write("hello ,welcome you!".getBytes()); //向客户端Client写入数据
byte[] buf = new byte[100]; //声明一个byte数组,用于接收客户端Client的输入数据
int len = is.read(buf); //读取客户端的输入Client数据并保存到byte数组中,返回数组大小
System.out.println(new String(buf,0,len)); //服务器端Server输出客户端的输入
os.close();//关闭输出流
is.close(); //关闭输入流
s.close(); //关闭Socket对象
ss.close(); //关闭服务器Socket对象
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
客户端Client代码:
import java.net.*;
import java.io.*;
class ClientSocket
{
public static void main(String[] args)
{
client();
}
public static void client()
{
try{
Socket s = new Socket(InetAddress.getByName("127.0.0.1"),6000); //创建指定IP的端口号为6000的服务请求
OutputStream os = s.getOutputStream(); //根据服务器端Server创建输出流对象
InputStream is = s.getInputStream(); //根据服务器端Server创建输入流对象
os.write("hello ,i am dajian!".getBytes()); //向服务器度Server写入字节码数据
byte[] buf = new byte[100]; //声明byte数组,用于接收服务器端的数据
int len = is.read(buf); //读入服务器度Server写入的数据到byte数组,返回数组大小
System.out.println(new String(buf,0,len)); //客户端输出数据
os.close(); //关闭输出流
is.close(); //关闭输入流
s.close();//关闭Socekt对象
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
3>>与Thread结合,实现持续不间断的侦听客户端的请求
import java.net.*;
import java.io.*;
//服务器端继承Thread,变成线程类
class ServerrSocket extends Thread
{
private Socket s; //套接字属性
//带参构造函数指定哪个为套接字提供服务
ServerrSocket(Socket s)
{
this.s = s;
}
//重写run方法
public void run()
{
try{
OutputStream os = s.getOutputStream();//输出流
InputStream is = s.getInputStream(); //输入流
os.write("hello ,welcome you!".getBytes());
byte[] buf = new byte[100];
int len = is.read(buf);
System.out.println(new String(buf,0,len));
os.close();
is.close();
s.close();
}catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
server();
}
public static void server()
{
try{
ServerSocket ss = new ServerSocket(6000);
System.out.println("服务器端启动...");
//while死循环实现始终等待客户端请求,接受请求开启线程,提供服务
while(true)
{
Socket s = ss.accept();
new ServerrSocket(s).start();//紧接着走run方法,run方法结束,线程结束
}
//ss.close(); //持续侦听,所以不对服务器Socekt对象进行关闭
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
4>>缓冲流读写大量数据的处理和注意事项
import java.net.*;
import java.io.*;
//服务器端继承Thread,变成线程类
class ServerrSocket extends Thread
{
private Socket s; //套接字属性
//带参构造函数指定哪个为套接字提供服务
ServerrSocket(Socket s)
{
this.s = s;
}
//重写run方法
public void run()
{
try{
/* //原始的输入流输出流方法
OutputStream os = s.getOutputStream();//输出流
InputStream is = s.getInputStream(); //输入流
os.write("hello ,welcome you!".getBytes());
byte[] buf = new byte[100];
int len = is.read(buf);
System.out.println(new String(buf,0,len));
os.close();
is.close();
s.close();
*/
/* 使用缓冲流读写数据 关键调用flush方法清空缓冲 或者最后将缓冲流对象关闭调用close方法
//演示调用flush方法清空缓冲
OutputStream os = s.getOutputStream();//输出流
InputStream is = s.getInputStream(); //输入流
BufferedOutputStream bos = new BufferedOutputStream(os);
bos.write("hello ,welcome you!".getBytes());
bos.flush();//必须清空缓冲,通过网络将数据送出去
byte[] buf = new byte[100];
int len = is.read(buf);
System.out.println(new String(buf,0,len));
*/
//演示调用close方法关闭缓冲
OutputStream os = s.getOutputStream();//输出流
InputStream is = s.getInputStream(); //输入流
BufferedOutputStream bos = new BufferedOutputStream(os);
bos.write("hello ,welcome you!".getBytes());
byte[] buf = new byte[100];
int len = is.read(buf);
System.out.println(new String(buf,0,len));
bos.close();
//os.close();
is.close();
s.close();
}catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
server();
}
public static void server()
{
try{
ServerSocket ss = new ServerSocket(6000);
System.out.println("服务器端启动...");
//while死循环实现始终等待客户端请求,接受请求开启线程,提供服务
while(true)
{
Socket s = ss.accept();
new ServerrSocket(s).start();//紧接着走run方法,run方法结束,线程结束
}
//ss.close(); //持续侦听,所以不对服务器Socekt对象进行关闭
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
发表评论
-
【Blue-Bird】邮件群发系统
2013-03-25 21:46 1194【Blue-Bird】邮件发送系统,是我研发的一个Java ... -
java获取本地磁盘(过滤掉U盘和软盘等)
2012-10-16 09:40 3927File[] _files = File.listRoo ... -
XmlDOM 小结
2012-08-10 16:53 1021/* 获取节点: - xmlDoc.getElem ... -
eclipse内存溢出处理办法
2012-07-31 14:44 3788"java.lang.OutOfMemoryErr ... -
tomcat使用xml文件部署项目
2012-02-02 21:53 1172<Context path="/emss ... -
String.format
2011-12-02 23:09 997String[] arr =new String[2]; ... -
配置一个最简洁的DWR
2011-04-04 16:31 987期工作: 1.dwr官网下载dwr.jar(http://d ... -
通过xml文件在tomcat中部署项目&取消保存session.ser的配置
2011-03-29 10:34 1726<Context path="/anjian& ... -
plsql操作oracle数据库小结
2011-03-28 18:05 5606登录oracle D:\>sqlplus ... -
java编程思想读书笔记
2011-03-17 11:06 10741 用句柄操作对象:句柄也叫引用或者指针。 可将这一情 ... -
CVSNT 用户单一验证方式建设文档
2011-03-01 10:29 13671 配置cvs服务 CVSNT Control Panel ... -
EasyT.java(20110223版本)
2011-02-23 14:56 1518package org.hdht.util; impor ... -
java杂谈
2011-02-23 14:47 1112hibenate配置文件定义datas ... -
Spring下的BaseHibernateDAO
2011-02-23 14:46 3546package com.accp.myzf.hibernate ... -
带事务得spring配置文件
2011-02-23 14:44 1122<?xml version="1.0" ... -
单利模式,堆栈,队列
2011-02-23 14:43 1061单利实例-------------- using Syste ... -
线程3
2011-02-23 14:41 1031配置java环境变量: 1指定jdk的bin目录路径:pat ... -
线程2
2011-02-23 14:39 1030>>3内部class类继承Thread的线程实现方 ... -
Thread
2011-02-23 14:37 1195>>//一个简单Thread缓冲池的实现 / ... -
基于UDP的Socket编程
2011-02-23 14:33 16891>>基于UDP的Socket编程用到的类和方法 ...
相关推荐
VC学习笔记 基于TCP的socket编程
实现了服务器与客户端功能的合二为一,客户端启动后,连接三次服务器,如果失败,则自己自动变为服务器。
基于TCP的Socket编程服务器和客户端代码
基于tcp连接的socket编程,简单实现基于tcp的server端和client端的连接。
基于TCP的Socket编程.pdf
《Java TCP/IP Socket编程(原书第2版)》基于TCP/IP Socket相关原理,对如何在Java中进行Socket编程作了深入浅出的介绍。《Java TCP/IP Socket编程(原书第2版)》内容简明扼要,条理清晰,并在讲解相应的概念或编程...
本文详细介绍了基于Socket的UDP和TCP的编程原理和方法,适合于那些对UDP/TCP的socket编程不太清楚的同学
基于tcp的socket编程实例,是由本人设计,说明可参见我的博客,谢谢大家支持。是初学网络编程的好资料。
基于TCP/IP协议的Socket编程,JAVA实现详解
基于TCP面向连接的 Socket网络编程实验
基于TCP下socket的编程简单通讯系统设计.论文.仅供参考.
C++开发基于TCPsocket实现的web服务器源码。基于TCP socket实现的支持报文解析并返回响应报文的Web服务器,可以响应多种文件需求并能够处理特定的错误情况 服务器实现及其功能: 1、读取配置文件,为服务器自身设置...
供大家借鉴学习之用 虽然还是偏重于理论 不过有助于你理清思路!
很好用的网络编程例子,都能运行,基于MFC对话框的,搜集了很久,给大家分享下
基于TCP协议的Socket编程 ① 创建TCP服务端步骤: a) 创建一个ServerSocket对象 b) 调用accept()方法接受客户端请求 c) 从Socket中获取I/O流 d) 对I/O流进行读写操作,完成与客户端的交互 e) 关闭I/O流和...
基于TCP协议的Socket通信编程实现C语言
资源包含客户端程序tcpclient.c,服务器端程序tcpserver.c,Makefile文件以及一个自动化配置安装脚本 setup.sh,具体使用方法如下: 1 即make为运行make命令编译 client 和server, 2. 即包括1中内容和运行服务器端,...
Java中基于TCPIP的Socket编程
socket编程基于tcp的通信