一、套接字 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. python--Websocket实现, 加密 sha1,base64

    需要用到gevent-websocket包,这里我们用下图这个 一.websocket简单实现 ep1.py from geventwebsocket.handler import WebSocket ...

  2. CentOS修改yum源为阿里云

    yum的工具,自动去下载某个yum仓库的 rpm软件包,并且自动搜索软件下载软件依赖,如同pip3,npm等包管理工具 yum载linux中的 yum仓库是 /etc/yum.repos.d 并且在这 ...

  3. 面向对象三大特性编写面向对象程序,self到底是谁

    一.函数式编程和面向对象的对比 面向过程:根据业务逻辑从上到下写垒代码: 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可: 面向对象:对函数进行分类和封装,让开发“更快更好更强. ...

  4. 网络基础、ftp任务(进度条、计算文件大小、断点续传、搭建框架示例)

    一.网络基础 1.端口,是什么?为什么要有端口? 端口是为了将同一个电脑上的不同程序进行隔离. IP是找电脑:端口是找电脑上的应用程序: 端口范围:1 – 65535 :    1 - 1024 不要 ...

  5. 同一域名基于源ip地址分配给不同ip的dns配置--bind9.8.2

    1.安装bind.略. 2./etc/named.conf配置文件. // named.conf // // Provided by Red Hat bind package to configure ...

  6. 解决linux下source /etc/profile关闭终端失效问题

    本来想配置环境变量的,看网上和博客上很多说改/etc/profile,然后source /etc/profile之后就可以永久保存使环境变量生效,但是终端一关闭,就环境变量就失效了,其他终端也用不了. ...

  7. Oracle SQL Developer连接报错以及链接oracle的sqlplus出现协议适配器错误

    之前用的好好的Oracle SQL Developer,不知道是不是匆忙关闭软件啥东西没保存或是删了什么东西,今天突然用不了的. 大清早的,打开Oracle SQL Developer,就给我一个惊喜 ...

  8. iOS-发送短信验证码倒计时

    /** 发送手机验证码 */ -(void)startSenderYzmMessage{ __block ; //倒计时时间 dispatch_queue_t queue = dispatch_get ...

  9. 矩阵乘法在numpy/matlab/数学上的不同

    数学意义上的矩阵乘法 注意事项: 1.当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘. 2.矩阵C的行数等于矩阵A的行数,C的列数等于B的列数. 3.乘积C的第m行第n列的 ...

  10. SQL Server —— 查询数据库、表、列等

    一.查询数据库(sys.databases —— select *from sys.databases where name='<数据库名>') select *from sys.data ...