一、套接字 Socket

网络驱动程序提供给应用程序编程的接口和一种机制,可以比喻成一个港口码头 应用程序只要把货放在这,就算完成了货物的运送。它在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自已对应的IP 和 Port。

Socket是 java 中网络编程的类 , 位于java.net包中。

---- DatagramSocket  //用于UDP通迅

---- ServerSocket //用于TCP通讯,用于服务端

---- Socket //用于Tcp通讯的服务端和客户端

二、UDP 网络程序

InetAddress 类  表示互联协议(IP)地址

//static InetAddress getLocalHost()     throws UnknownHostException 返回本地主机

//static InetAddress getByName(String host)  在给定主机名的情况下确定主机的 IP 地址。 主机名可以是机器名
                                                                                         //(如 "java.sun.com"),也可以是其 IP 地址的文本表示形式

//static InetAddress[] getAllByName(String host) 根据主机名返回其 IP 地址所组成的数组。

static void ipDemo() throws UnknownHostException{
InetAddress netAddr=InetAddress.getLocalHost(); //取得本地电脑的一些信息
System.out.println(netAddr.toString());
System.out.println(netAddr.getHostAddress());
System.out.println(netAddr.getHostName()); //取得其他电脑的信息
InetAddress netAddr2=InetAddress.getByName("DELL-PC"); //这里也可以传IP地址
System.out.println(netAddr2.getHostAddress()); //169.254.170.71
System.out.println(netAddr2.getHostName()); //DELL-PC //取得百度的地址
InetAddress [] ipList=InetAddress.getAllByName("www.baidu.com");
for(InetAddress addr:ipList){
System.out.println(addr.toString());
}
}

三、UDP发送和接收  DatagramSocket , DatagramPacket

//例一 最简的发送和接收

发送端==要导java.net包

通过UDP的方式把数据发出去:

1) 建立UDPSocket服务

2) 提供数据,将数据封装到数据包中  DatagramPacket (byte[] buf, int length, InetAddress address, int port) //构造函数有多个

3) 通过Socket服务,发送数据

4) 关闭资源

import java.net.*;
class Sender4{
//DatagramPacket (byte[] buf, int length, InetAddress address, int port)
public static void main(String [] args) throws Exception
{
byte [] buff="hello cat".getBytes();
DatagramSocket socket=new DatagramSocket();
DatagramPacket packet=new DatagramPacket(buff,buff.length,InetAddress.getByName("192.168.0.103"),8888);
socket.send(packet);
socket.close();
System.out.println("ok");
}
}

--接收端

1) 创建Socket服务,指定在某个端口上监听

2) 创建一个用于接收数据的  DatagramPacket

3) 从包中取出数据

4) 关闭资源

import java.net.*;
class Receive4
{
public static void main(String [] args) throws Exception
{
DatagramSocket socket=new DatagramSocket(8888); //别忘了端口号
byte[] buff=new byte[1024] ;
DatagramPacket packet=new DatagramPacket(buff,buff.length); socket.receive(packet); String senderIp=packet.getAddress().getHostAddress();
String senderData=new String(packet.getData(),0,packet.getLength());
int senderPort=packet.getPort();
System.out.println(senderIp+"---"+senderData+"---"+senderPort); socket.close();
}
}

//例二,循环的发送和接收

import java.net.*;
import java.io.*;
class NewSender{
public static void main(String [] args) throws Exception
{
System.out.println("发送端启动了");
DatagramSocket socket=new DatagramSocket(); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); //包装键盘输入流
String str=null;
while((str=br.readLine())!=null){
byte [] buff=str.getBytes();
DatagramPacket packet=new DatagramPacket(buff,buff.length,InetAddress.getByName("127.0.0.1"),9000);
socket.send(packet);
} br.close();
socket.close();
}
}
import java.net.*;
class NewReceiver{
public static void main(String [] args) throws Exception
{
DatagramSocket socket=new DatagramSocket(9000);
System.out.println("接收端启动了"); while(true){
byte [] buff=new byte[1024] ;
DatagramPacket packet=new DatagramPacket(buff,buff.length);
socket.receive(packet); String senderIp=packet.getAddress().getHostAddress();
int sendPort=packet.getPort();
String msg= new String(packet.getData(),0,packet.getLength()); System.out.println(senderIp+":"+sendPort+":"+msg);
}
}
}

例三:多线程聊天室程序

class Chat
{
public static void main(String [] args)
{
new Thread(new SendThread()).start();
new Thread(new ReceiveThread()).start();
}
}
//发送端
import java.io.*;
import java.net.*;
class SendThread implements Runnable
{
private DatagramSocket socket;
public void run()
{
try{
socket=new DatagramSocket();
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String msg=null;
while((msg=br.readLine())!=null){
byte[] buff=msg.getBytes();
DatagramPacket packet=new DatagramPacket(buff,buff.length,InetAddress.getByName("127.0.0.1"),10000);
socket.send(packet);
} socket.close();
br.close();
}
catch(Exception ex){
ex.printStackTrace();
}
}
}
//接收端
import java.net.*;
class ReceiveThread implements Runnable{
private DatagramSocket socket; public void run(){
try{
socket=new DatagramSocket(10000);
while(true){
byte [] buff=new byte[1024];
DatagramPacket packet=new DatagramPacket(buff,buff.length);
socket.receive(packet); String senderIp=packet.getAddress().getHostAddress();
int senderPort=packet.getPort();
String msg=new String(packet.getData(),0,packet.getLength()); System.out.println(senderIp+":"+senderPort+":"+msg); }
}
catch(Exception ex)
{
System.out.println(ex.getMessage());
}
}
}

Java基础——网络编程(二)的更多相关文章

  1. java基础-网络编程(Socket)技术选型入门之NIO技术

    java基础-网络编程(Socket)技术选型入门之NIO技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传统的网络编程 1>.编写socket通信的MyServer ...

  2. 二十三、Java基础--------网络编程

    Java中另一个重要技术就是网络编程了,为了更好的学习web方向的知识,有必要对java之网络编程好好学习,本文将围绕网络编程技术进行分析. 常见的网络协议:UDP.TCP UDP 1. 将数据源和目 ...

  3. Java基础——网络编程

    一.网络编程概述 概述: Java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序. Java提供的网络类库,可以实现无痛的网络连接,联网 ...

  4. java基础—网络编程

    一.网络基础概念 首先理清一个概念:网络编程 != 网站编程,网络编程现在一般称为TCP/IP编程.

  5. JAVA基础——网络编程之网络链接

    一.网络编程基本概念 1.OSI与TCP/IP体系模型 2.IP和端口 解决了文章最开始提到的定位的问题. IP在互联网中能唯一标识一台计算机,是每一台计算机的唯一标识(身份证):网络编程是和远程计算 ...

  6. Java基础——网络编程(一)

    本文主要记录网络编程的一些基础知识,学了前班部分,对专业术语有些蒙,但是,收货也是很多很多的.观察了自己计算机的进程,查找其他网络地址的IP,对互联网的层次关系有了更深一步的了解.下面多是概念的摘录, ...

  7. Java基础——网络编程(三)

    TCP 网络编程 -- tcp 分为客户端和服务端 -- 客户端对应的对象是 Socket -- 服务端对应的对象是 ServerSocket -- 如果客户端先启动,则出现 connection r ...

  8. 梦入IBM之java基础-网络编程

    如今我们来谈谈最后的内容:网络编程: 1):TCP中是线程与线程进行通讯!内部的执行机制是这种:先有一个线程去监听某个port.然后假设有Socket连接上来了以后,server会生成一个Socket ...

  9. Java基础-网络编程1

    网络编程 Socket 基本概念 C/S结构 :全称为Client/Server结构,是指客户端和服务器结构.常见程序有QQ.迅雷等软件. B/S结构 :全称为Browser/Server结构,是指浏 ...

随机推荐

  1. jQuery基础(4)- 位置信息、事件流、事件对象、事件代理、jquery事件

    一.jQuery的位置信息 jQuery的位置信是JS的client系列.offset系列.scroll系列封装好的一些简便api. 1.宽度和高度 a.获取宽度和高度,例如: .width() // ...

  2. cad2015卸载/安装失败/如何彻底卸载清除干净cad2015注册表和文件的方法

    cad2015提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装cad2015失败提示cad2015安装未完成,某些产品无法安装,也有时候想重新安装cad2015 ...

  3. Android逆向——smali复杂类解析

    i春秋作家:HAI_ 之前在Android逆向——初识smali与java类中讲解了基本的HelloWorld和简单类.这节课就要进一步深入.如果能够耐下心来分析一定会有所收获.——写给自己和后来人. ...

  4. Redis---基础数据结构

    1.String(字符串) 1.1 概述 字符串 string 是 Redis 最简单的数据结构.Redis 所有的数据结构都是以唯一的 key 字符串作为名称,然后通过这个唯一 key 值来获取相应 ...

  5. 前端开发者不得不知的ES6十大特性

    前端开发者不得不知的ES6十大特性 转载 作者:AlloyTeam 链接:http://www.alloyteam.com/2016/03/es6-front-end-developers-will- ...

  6. webApp开发中的总结

    meta标签:  H5页面窗口自动调整到设备宽度,并禁止用户缩放页面 <meta name="viewport" content="width=device-wid ...

  7. Failed to start docker.service: Unit not found.

    安装教程参考: https://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce-1 https://yq.aliyu ...

  8. MVC3学习:利用mvc3+ajax实现级联下拉列表框

    本例使用的是EF first code操作数据库. 一.准备数据库 级联下拉列表框,比较经典的就是省市数据表,在Model里同时创建三个类:province.cs.city.cs和dropContex ...

  9. rpm安装JDK方法

    由于版权原因,Linux发行版并没有包含官方版的Oracle JDK,必须自己从官网上下载安装.Oracle官网用Cookie限制下载方式,使得眼下只能用浏览器进行下载,使用其他方式可能会导致下载失败 ...

  10. CentOS 6.7 下 PostgreSQL 9.5 的安装与配置

    #yum方式安装(不同的系统版本对应的版本也不同) yum install postgresql-server #安装指定版本 yum install https://download.postgre ...