基础知识:Java网络编程

用TCP通信模型创建一个web服务器

?
?

主要用ServerSocket 一直监听,这里将其放到while循环中,在循环体内单开一个线程

?
?

public class MyWebServer {

public static void main(String[] args) throws IOException {

ServerSocket ss=new ServerSocket(80);

Socket socket=null;

while((socket=ss.accept())!=null){

new HTTPThread(socket).start();

}

ss.close();

}

}

?
?

在线程中的run方法中写要做的东西,另外要在构造函数中将Socket对象传进来

?
?

public class HTTPThread extends Thread {

private Socket socket;

HTTPThread(Socket socket){

this.socket=socket;

}

public void run() {

OutputStream outputStream=socket.getOutputStream();

PrintWriter pWriter=new PrintWriter(outputStream);

pWriter.println("<html>");

pWriter.println("<body>");

pWriter.println("hello! this is my page");

pWriter.println("</body>");

pWriter.println("</html>");

pWriter.flush();

pWriter.close();

socket.close();

}

}

?
?

用UDP通信模型创建一个即时聊天软件

?
?

主要是要写一个接收线程和一个发送线程,然后就在main函数中启动这两个线程就ok了

?
?

class SendThread extends Thread {

private DatagramSocket datagramSocket;

private int sendPort;

SendThread(int port, int sendPort) {

super();

this.sendPort = sendPort;

this.datagramSocket = new DatagramSocket(port);

}

public void run() {

BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));

String string = null;

while ((string = bReader.readLine()) != null) {

DatagramPacket dp = new DatagramPacket(string.getBytes(),0,string.length(),InetAddress.getByName("localhost"),sendPort);

datagramSocket.send(dp);

System.out.println("send message:" + string);

}

}

}

class ReceiveThread extends Thread {

private DatagramSocket datagramSocket;

ReceiveThread(int port) {

super();

this.datagramSocket = new DatagramSocket(port);

}

public void run() {

byte[] buff = new byte[1024];

DatagramPacket dp = new DatagramPacket(buff, 1024);

while (true) {

datagramSocket.receive(dp);

String string = new String(dp.getData(), 0, dp.getLength());

System.out.println("receive message:" + string);

}

}

}

public static void main(String[] args) throws SocketException {

new ReceiveThread(Integer.valueOf(args[0])).start();

new SendThread(Integer.valueOf(args[1]), Integer.valueOf(args[2])).start();

}

?
?

用Java访问web站点

?
?

首先通过一个路径的字符串作为参数创建一个URL对象,调用URL对象的openConnection方法得到一个HttpURLConnection对象的引用

?
?

然后调用HttpURLConnection的connect方法建立连接,待建立好连接之后,就可以调用HttpURLConnection的getHeaderFields方法得到一个Map对象,这个Map对象中存放的就是Header中的键值对

?
?

服务器除了返回Header之外,还会返回响应内容,用一个BufferedReader读这些响应内容,当然会用到InputStreamReader作为参数,而InputStreamReader的输入来源即是调用HttpURLConnection的getInputStream方法

?
?

public static void main(String[] args) throws IOException {

String path = "http://www.baidu.com";

URL url = new URL(path);

HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();

httpURLConnection.connect();

Map<String, List<String>> headerMap = httpURLConnection.getHeaderFields();

for (String key : headerMap.keySet()) {

System.out.println(key + ":" + headerMap.get(key));

}

BufferedReader br = new BufferedReader(new InputStreamReader(

httpURLConnection.getInputStream(), "utf-8"));

String string=null;

while((string=br.readLine())!=null){

System.out.println(string);

}

httpURLConnection.disconnect();

}

时间: 2024-11-09 06:20:45

基础知识:Java网络编程的相关文章

JAVA基础知识之网络编程——-网络基础(多线程下载,get,post)

本文主要介绍java.net下为网络编程提供的一些基础包,InetAddress代表一个IP协议对象,可以用来获取IP地址,Host name之类的信息.URL和URLConnect可以用来访问web资源,URLDecode和URLEncode用来转换字符串. 本文会写两个例子来演示java网络编程的一些基本用法. 第一个例子,写一个程序用来模拟多线程下载. 本例中用到的技术有,多线程--多个线程同时读文件写文件,可以加快下载速度, 线程池--在本例中线程池不是必须,甚至是多余,只不过是为了演示

JAVA基础知识之网络编程——-基于AIO的异步Socket通信

异步IO 下面摘子李刚的<疯狂JAVA讲义> 按照POSIX标准来划分IO,分为同步IO和异步IO.对于IO操作分为两步,1)程序发出IO请求. 2)完成实际的IO操作. 阻塞IO和非阻塞IO都是针对第一步来划分的,如果发出IO请求会阻塞线程,就是阻塞IO,否则就是非阻塞IO. 同步IO和非同步IO是针对第二步来说的,如果实际IO操作是由操作系统完成,再返回给程序,就是异步IO. 如果实际的IO需要程序本身去执行,会阻塞线程,就是同步IO. JAVA7的NIO.2提供了异步的channel,

JAVA基础知识之网络编程——-TCP/IP协议,socket通信,服务器客户端通信demo

OSI模型分层 OSI模型是指国际标准化组织(ISO)提出的开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM),它将网络分为七层:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层 TCP/IP协议 TCP/IP是一系列网络通信协议的统称,其中最核心的两个协议是TCP和IP.TCP称为传输控制协议,IP称为互联网络协议. 网络分层除了OSI模型分层,还有TCP/IP模型分层,将网络划分为四层,应用层.传输层.网际层

JAVA基础知识之网络编程——-基于UDP协议的通信例子

UDP是一种不可靠的协议,它在通信两端各建立一个socket,这两个socket不会建立持久的通信连接,只会单方面向对方发送数据,不检查发送结果. java中基于UDP协议的通信使用DatagramSocket类的receive和send方法即可,但消息需要通过一个特定的类封装(DatagramPacket) 下面是一个基于UDP协议的通信的例子, 服务器端, 1 package udp; 2 3 import java.io.IOException; 4 import java.net.Dat

JAVA基础知识之网络编程——-基于NIO的非阻塞Socket通信

阻塞IO与非阻塞IO 通常情况下的Socket都是阻塞式的, 程序的输入输出都会让当前线程进入阻塞状态, 因此服务器需要为每一个客户端都创建一个线程. 从JAVA1.4开始引入了NIO API, NIO可以实现非阻塞IO, 这样就可以使用一个线程处理所有的客户请求. 基于NIO的非阻塞Socket通信 服务器将用来监听客户端请求的channel注册到selector上,启动一个线程,使用selector的select()获取求情的客户端的channel数量, 当监听到有客户端请求时,就通过Sel

Android学习之基础知识十三—网络编程的最佳实践

上一讲已经掌握了HttpURLConnection和OkHttp的用法,知道如何发起HTTP请求,以及解析服务器返回的数据,但是也许你还没发现,之前我们的写法其实是很有问题的,因为一个应用程序很可能会在许多地方使用到网络功能,而发送HTTP请求的代码基本都是相同的,如果我们每次都去编写一遍发送HTTP请求的代码,这显然是非常差劲的做法. 通常情况下我们都应该将这些通用的网络操作提取到一个公共的类里,并提供一个静态方法,当想要发起网络请求的时候,只需要简单的调用一下这个方法即可,比如使用如下的写法

一站式学习Java网络编程 全面理解BIO/NIO/AIO完整版

一站式学习Java网络编程 全面理解BIO/NIO/AIO 资源获取链接:点击获取完整教程 网络层编程,是每一个开发者都要面对的技术.课程为解决大家学习网络层知识的难题,以创新性的“对比式学习”搭建网络编程课程,课程主线清晰(网络层基础铺垫-->java网络编程前置技术讲解-->阻塞式编程BIO-->非阻塞式编程NIO-->异步编程AIO-->综合实战)适合每一位需要理解网络编程的同学们学习.以“项目驱动”为导向的学习,与企业刚需灵魂契合. 适合人群 网络编程作为编程者的必备

Java网络编程基础【转】

网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你 会打手机吗?很多人可能说肯定会啊,不就是按按电话号码,拨打电话嘛,很简单的事情啊!其实初学者如果入门网络编程的话也可以做到这么简单! 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.

Java网络编程学习A轮_01_目标与基础复习

A. A轮目标 复习网络编程基础知识,重点学习下TCP三次握手四次挥手,以及可能引发的异常情况. 回顾 Socket 编程,好多年没写(chao)过相关代码了. 重学 NIO,以前学的基本忘光了,毕竟从来没在项目中用过. 学习 Netty,了解基本用法,写一个简单项目练手. 扫读 Netty 核心源码,了解其线程模型,重点学习 Netty 如何使用 NIO. 搜罗面试题,查漏补缺. B. 基础知识 参考资料:<Java网络编程 第四版> 网际层(internet layer): 定义了数据位和

Java网络编程基础(二)-- 基于TCP/IP的Socket编程

本节讲点: 客户端套接字:Socket:Socket的创建和使用方法,以及Socket选项和异常. 服务端套接字:ServerSocket:SeverSocket的创建和使用方法,以及ServerSocket选项 简单的Client/Server对话程序 支持多客户端的Client/Server服务响应程序 在学习JDK的网络编程之前先要了解一下网络基础知识和网络协议. TCP(传输控制协议)一种基于连接的通信协议.可靠传输 UDP(用户数据包协议)不稳定连接的通信协议 TCP和UDP的端口如下