△客户端使用Scanner与BufferedReader的异同,Scanner在客户端调用s.shutdownoutput的时候,将会因为读不到行而报异常,但是BufferedReader的readline方法则会正常终止.因此应当根据实际情况选择客户端服务端的流输入.

△实例:根据DatagramSocket和DatagramPacket建立发送端和接收端。

接收端:

public class Receive {

        public static void main(String[] args) throws IOException {
System. out.println("接收端启动……" );
// 建立socket流
DatagramSocket ds=new DatagramSocket();
//将要接受的数据封装到数据包中
byte[] b =new byte[];
DatagramPacket dp= new DatagramPacket(b ,b .length );
//接受数据
ds.receive( dp);
//获取数据中 的信息
String s= new String(dp .getData(),,dp.getLength());
System. out.println(dp .getAddress().getHostAddress()+"::"+ dp.getPort()+ "..."+s );
} }

发送端:

public class Send {

        public static void main(String[] args) throws IOException {
System. out.println("发送端启动。。。。。。。。。。" );
String s= "hello world!" ;
byte[] b =s .getBytes();
//建立socket连接
DatagramSocket ds= new DatagramSocket();
//将要发送的数据信息封装到数据包中
DatagramPacket dp= new DatagramPacket(b,b .length ,InetAddress.getByName ("192.168.0.103" ),9999);
//将数据包的数据发送出去
ds.send( dp);
//关闭socket
ds.close();
} }
△TCP客户端和服务端练习时,要注意以下两点:
 1.输出流需要及时刷新,保证这一点可以让PrintWriter参数列表里有true。
 2.readline方法必须要读取到换行符,否则会一直处于阻塞状态
 3.在文件读写时,当服务端读写客户端的输入流时,可以在客户端用shutdownoutput方法告诉服务端,(半关闭状态)客户端的读写已经结束。
△TCP传输也可以使用带资源的try语句(方便自动关闭):
public class Server1 {
public static void main(String[] args) throws IOException {
ServerSocket ss =new ServerSocket(9998);
try (Socket s =ss .accept();) { PrintWriter pw= new PrintWriter(s .getOutputStream(), true);
// Scanner scanner=new Scanner(s.getInputStream());
try (BufferedReader bufr = new BufferedReader(new InputStreamReader(s .getInputStream()));) {
String str= null ;
while ((str =bufr .readLine())!= null) {
pw.println( str.toUpperCase());
}
}
}
}
}

△TCP服务端是多线程的:在接受到一个Socket后,在run方法内执行操作(开启一条线程操作,主线程继续等待接受)标准代码如下:

public class Server2 {
public static void main(String[] args) throws IOException {
ServerSocket ss =new ServerSocket(9999);
while (true ) {
Socket s= ss.accept();
Runnable r=new RunnableImplements(s);
Thread t=new Thread(r);
t.start();
}
}
}
class RunnableImplements implements Runnable {
private Socket incoming;
public RunnableImplements(Socket i) {
incoming=i;
}
public void run() {
System.out.println("任务开始");
//任务
}
}
△可中断套接字:
 当通过套接字读写数据的时候,当前线程会被阻塞直到操作或产生超时为止.为了中断套接字操作,可以使用SocketChannel类.如下:
SocketChannel channel=SocketChannel.open(new InetSocketAddress(host,port));        //获取通道
Scanner in=new Scanner(channel); //获取输入流,或者Channel.newInputStream()方法获取字节输入流
OutputStream out=Channels.newOutputStream(channel); //获取输出流
 这时候,如果服务器线程正在执行打开或者读取或写入操作,此时如果线程中断,那么这些操作将不会陷入阻塞,而是已抛出异常的形式结束.
△URL类可以封装统一资源定位符,URL类可以打开一个到资源的流,可以调用openConnection方法,建立连接,调用getHeadFields方法获取Map对象类型的相应头.下面是示例(将输出响应头):
public class Demo1 {
public static void main(String[] args) throws IOException {
URL url= new URL("http://www.baidu.com" );
URLConnection con= url.openConnection();
con.connect();
Map<String,List<String>> headers =con .getHeaderFields();
for (Map.Entry<String,List<String>> entry :headers .entrySet()) {
String key= entry.getKey();
for (String value :entry .getValue()) {
System. out .println(key +"::" +value );
}
}
}
}
△URL和URLConnection实现提交表单数据:
1.URL封装资源定位符
2.打开连接,采用openConncetion方法.
3.connection.setDoOutput(true);建立可以输出的连接
4.PrintWriter out=new PrintWriter(connection.getOutPutStream()); 获取可以输出数据的流
5.调用Out的打印方法,发送数据.

JavaSE复习_12 Socket网络编程的更多相关文章

  1. Python全栈【Socket网络编程】

    Python全栈[socket网络编程] 本章内容: Socket 基于TCP的套接字 基于UDP的套接字 TCP粘包 SocketServer 模块(ThreadingTCPServer源码剖析) ...

  2. Linux Socket 网络编程

    Linux下的网络编程指的是socket套接字编程,入门比较简单.在学校里学过一些皮毛,平时就是自学玩,没有见识过真正的socket编程大程序,比较遗憾.总感觉每次看的时候都有收获,但是每次看完了之后 ...

  3. Python Socket 网络编程

    Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...

  4. python之Socket网络编程

    什么是网络? 网络是由节点和连线构成,表示诸多对象及其相互联系.在数学上,网络是一种图,一般认为专指加权图.网络除了数学定义外,还有具体的物理含义,即网络是从某种相同类型的实际问题中抽象出来的模型.在 ...

  5. Python之路【第七篇】python基础 之socket网络编程

    本篇文章大部分借鉴 http://www.cnblogs.com/nulige/p/6235531.html python socket  网络编程 一.服务端和客户端 BS架构 (腾讯通软件:ser ...

  6. Socket网络编程-基础篇

    Socket网络编程 网络通讯三要素: IP地址[主机名] 网络中设备的标识 本地回环地址:127.0.0.1 主机名:localhost 端口号 用于标识进程的逻辑地址 有效端口:0~65535 其 ...

  7. Socket网络编程--FTP客户端

    Socket网络编程--FTP客户端(1)(Windows) 已经好久没有写过博客进行分享了.具体原因,在以后说. 这几天在了解FTP协议,准备任务是写一个FTP客户端程序.直接上干货了. 0.了解F ...

  8. windows下的socket网络编程

    windows下的socket网络编程 windows下的socket网络编程 clinet.c 客户端 server.c 服务器端 UDP通信的实现 代码如下 已经很久没有在windows下编程了, ...

  9. windows下的socket网络编程(入门级)

    windows下的socket网络编程 clinet.c 客户端 server.c 服务器端 UDP通信的实现 代码如下 已经很久没有在windows下编程了,这次因为需要做一个跨平台的网络程序,就先 ...

随机推荐

  1. 关于iframe嵌套、动态获取iframe内的url、父页面重定向-2

    经过学习,发现了一种更好的办法 试验如下 1.html的内容如下: (2.html和3.html没有jquery,只有body的222和333) 结果为: 其实最容易搞糊涂的是,什么时候算self,其 ...

  2. 【转】SVN提示:由于目标机器积极拒绝,无法连接 的解决方法

    转载地址:http://wxiaolei.blog.163.com/blog/static/1038760120133108180596/ 安装完TSVN之后,checkout时报错,并且后来在cmd ...

  3. maven 手动安装jar到仓库的命令

    mvn install:install-file -DgroupId=com.sun -DartifactId=tools -Dversion=1.6.0 -Dpackaging=jar -Dfile ...

  4. Session案例:简易的购物车

    三个jsp和两个Servlet组成:在WebContent下边建立一个shoppingcart文件夹,将三个jsp文件放在里面: 1.建立一个step1.jsp文件,出现一个表格,是一个复选框,可以选 ...

  5. Session机制(是对cookie的作用的提升,使用较多)

    1.Session作用类似于购物车,第一次,放入物品,可以获得Session的id,并可以设置id失效的时间,这样便于多次将物品放在购物车里面,使用的就是获取的Session的id: 2.Sessio ...

  6. Java学习之路(七)

    1:什么是异常?  中断了正常指令流的事件. 异常是一个对象 ,在出现异常时,虚拟机会生成一个异常对象 生成对象的类是由 JDK 提供的

  7. 修改datagridview中其中一列的值

    控件.rows[0].cells['名'].value = 值

  8. opencv的实用研究--分析轮廓并寻找边界点

    opencv的实用研究--分析轮廓并寻找边界点 ​      轮廓是图像处理中非常常见的.对现实中的图像进行采样.色彩变化.灰度变化之后,能够处理得到的是“轮廓”.它直接地反应你了需要分析对象的边界特 ...

  9. 自己模拟实现spring IOC原理

    1.1.IoC是什么 Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对 ...

  10. 华东交通大学2016年ACM“双基”程序设计竞赛 1004

    Problem Description LB是个十分喜欢钻研的人,对什么事都要搞明白.有一天他看到一个公式,((a-b)*c+d*e)/f=k.他想如果给定K的值,一共有多少种不同整数的组合(a,b, ...