一、套接字 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. WPF Command CanExecute 触发一次的问题

    昨天在项目中遇到一个问题,按钮bind了Command后,利用CanExecute控制它的是否可点击.结果却在初始化viewmodel的时候执行了一次CanExecute,之后一直不触发,按钮的可用性 ...

  2. KMP字符串匹配 简单理解

    http://www.cnblogs.com/c-cloud/p/3224788.html 字符串匹配,长串长度为m,子串长度为n 则,暴力破解的复杂度为o(m*n) 如果用kmp匹配,则复杂度为o( ...

  3. 09_python_初始函数

    一.定义 函数是对功能和动作的封装 def functionname( parameters ): "函数_文档字符串" function_suite return [expres ...

  4. storm安装以及简单操作

    storm的安装比较简单,下面以storm的单节点为例说明storm的安装步骤. 1.storm的下载 进入storm的官方网站http://storm.apache.org/,点击download按 ...

  5. 用开源 ASP.NET MVC 程序 Bonobo Git Server 搭建 Git 服务器(转)

    用开源 ASP.NET MVC 程序 Bonobo Git Server 搭建 Git 服务器   现在不用Git,都不好意思说自己是程序员. 当你想用Git,而源代码服务器是Windows系统时,你 ...

  6. (转)实现一个cache装饰器,实现过期可清除功能

    原文:http://www.cnblogs.com/JerryZao/p/9574927.html http://blog.51cto.com/11281400/2107790-----装饰器应用练习 ...

  7. sqlserver暂时禁用触发器进行update

    --1.禁用某个表上的所有触发器 ALTER TABLE tbname DISABLE TRIGGER all go --2.执行update语句 update tbname set .... go ...

  8. Microsoft Azure Storage架构分析

    Microsoft云存储服务分为两个部分,SQL Azure和Azure Storage.云存储系统的可扩展性和功能不可兼得,必须牺牲一定的关系数据库功能换取可扩展性.Microsoft实现云存储的思 ...

  9. Android之apk优化

    公司的apk越做越大...作为一个有追求的程序员,我觉得有必要给apk瘦身了... 优化之前,先来分析一下apk结构,下面附上一张apk结构图: apk结构.png 由于我这个项目集成了百度地图.百度 ...

  10. ecshop 安装出错gd_version

    678: static function gd_version()