JavaSE复习_12 Socket网络编程
△客户端使用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();
} }
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 channel=SocketChannel.open(new InetSocketAddress(host,port)); //获取通道
Scanner in=new Scanner(channel); //获取输入流,或者Channel.newInputStream()方法获取字节输入流
OutputStream out=Channels.newOutputStream(channel); //获取输出流
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 );
}
}
}
}
JavaSE复习_12 Socket网络编程的更多相关文章
- Python全栈【Socket网络编程】
Python全栈[socket网络编程] 本章内容: Socket 基于TCP的套接字 基于UDP的套接字 TCP粘包 SocketServer 模块(ThreadingTCPServer源码剖析) ...
- Linux Socket 网络编程
Linux下的网络编程指的是socket套接字编程,入门比较简单.在学校里学过一些皮毛,平时就是自学玩,没有见识过真正的socket编程大程序,比较遗憾.总感觉每次看的时候都有收获,但是每次看完了之后 ...
- Python Socket 网络编程
Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...
- python之Socket网络编程
什么是网络? 网络是由节点和连线构成,表示诸多对象及其相互联系.在数学上,网络是一种图,一般认为专指加权图.网络除了数学定义外,还有具体的物理含义,即网络是从某种相同类型的实际问题中抽象出来的模型.在 ...
- Python之路【第七篇】python基础 之socket网络编程
本篇文章大部分借鉴 http://www.cnblogs.com/nulige/p/6235531.html python socket 网络编程 一.服务端和客户端 BS架构 (腾讯通软件:ser ...
- Socket网络编程-基础篇
Socket网络编程 网络通讯三要素: IP地址[主机名] 网络中设备的标识 本地回环地址:127.0.0.1 主机名:localhost 端口号 用于标识进程的逻辑地址 有效端口:0~65535 其 ...
- Socket网络编程--FTP客户端
Socket网络编程--FTP客户端(1)(Windows) 已经好久没有写过博客进行分享了.具体原因,在以后说. 这几天在了解FTP协议,准备任务是写一个FTP客户端程序.直接上干货了. 0.了解F ...
- windows下的socket网络编程
windows下的socket网络编程 windows下的socket网络编程 clinet.c 客户端 server.c 服务器端 UDP通信的实现 代码如下 已经很久没有在windows下编程了, ...
- windows下的socket网络编程(入门级)
windows下的socket网络编程 clinet.c 客户端 server.c 服务器端 UDP通信的实现 代码如下 已经很久没有在windows下编程了,这次因为需要做一个跨平台的网络程序,就先 ...
随机推荐
- HDU 1715 大菲波数
大菲波数 问题描述 : Fibonacci数列,定义如下: f(1)=f(2)=1 f(n)=f(n-1)+f(n-2) n>=3. 计算第n项Fibonacci数值. 输入: 输入第一行为一 ...
- 中国地图 xaml Canvas
<Canvas x:Name="LayoutRoot" Height="560" Width="700" Background=&q ...
- Oracle 客户端安装配置
电脑上安装了Oracle11G,我远程导出一个10g的数据库数据时,报了错误,猜测可能是我的11G客户端版本的问题.所以下载了10G的客户端 安装. 其实客户端的配置读取的是两个文件监听配置文件lis ...
- 2016-2017 CT S03E05: Codeforces Trainings Season 3 Episode 5 (2016 Stanford Local Programming Contest, Extended) J
链接:http://codeforces.com/gym/101116 题意:给出n个点,要求一个矩形框将(n/2)+1个点框住,要面积最小 解法:先根据x轴选出i->j之间的点,中间的点(包括 ...
- java提高篇---Iterator
迭代对于我们搞Java的来说绝对不陌生.我们常常使用JDK提供的迭代接口进行Java集合的迭代. Iterator iterator = list.iterator(); while(iterator ...
- Mysql--学习笔记(==》简单查询三)
-- 查看查询数据显示SELECT * FROM student; -- 显示一部分信息的查询SELECT sname 姓名,sscore 成绩,saddress 家庭住址 FROM student; ...
- main函数参数解析
int argc,char *argv agrc表示参数的个数 argv储存参数 这个函数的意思是逐一输出参数 实际上,main函数也可以带参数.带参数main函数的定义格式如下:void main( ...
- linux硬盘分区格式化及挂载
1.硬盘的接口类型 硬盘的接口一般分为两种,一种是IDE并行接口,一种是SATA串行接口, 在linux上面IDE接口的硬盘被识别为/dev/hd[a-z]这样的设备,其中hdc表示光驱设备,这是因为 ...
- Cacti中文版在Centos上的安装
最近老有人问Cacti中文版在哪下载啊怎么安装啊,我在这里一遍给大家讲解了:Cacti中文版在Centos上的安装 1.基本安装 cacti是运作在apache+php+mysql+net-snmp工 ...
- 【转载】C++内存分配
原文:C++内存分配 内存泄露相信对C++程序员来说都不陌生.解决内存泄露的方案多种多样,大部分方案以追踪检测为主,这种方法实现起来容易,使用方便,也比较安全. 首先我们要确定这个模块的主要功能: 能 ...