一、套接字 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. c#中的几种Dialog

    1.OpenFileDialog private void FileOpen_Click(object sender, EventArgs e) { OpenFileDialog openFile = ...

  2. Devexpress中Gridcontrol查找分组

    private void button1_Click(object sender, EventArgs e) { DataTable dt = new DataTable(); dt.Columns. ...

  3. UWP Button添加圆角阴影(二)

    原文:UWP Button添加圆角阴影(二) 阴影 对于阴影呢,WindowsCommunityToolkit中已经有封装好的DropShadowPanel啦,只要引用Microsoft.Toolki ...

  4. [海外干货] BlackHat 2017 首日议题的所有 PPT以及材料

    今年是 Black Hat 举办的第 20 个年头,高温酷暑也挡不住全世界黑客和安全人员奔赴拉斯维加斯的热情.毕竟这可是一年一度的盛大狂欢啊.今年的 BHUSA 从美国东部时间时间 7 月 22 日( ...

  5. python学习笔记12-深浅拷贝

    以上为浅拷贝. .copy()函数 赋值:数据完全共享(=赋值是在内存中指向同一个对象,如果是可变(mutable)类型,比如列表,修改其中一个,另一个必定改变 如果是不可变类型(immutable) ...

  6. 在MySQL Workbench查看表,表结构,索引,函数,存储过程,触发器,重连

    表 表结构 索引 触发器 存储过程 函数 重新连接 出现Error Code: 2006 MySQL server has gone away时

  7. Vue2.5开发去哪儿网App 第二章笔记

    Vue完成  TodoList 1.默认方式 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  8. Java异常处理设计(一)

    很多次的经验教训,让我不得不重视异常处理.经常遇到的问题如下:1)日志不准确,错误原因难以查明!!2)日志量太大,查找麻烦!!3)哪里需要记录日志,哪里不用记录日志?往往随心所欲!!分析以上问题,深入 ...

  9. JavaScript -- Screen

    -----041-Screen.html----- <!DOCTYPE html> <html> <head> <meta http-equiv=" ...

  10. nginx服务器搭建以及配置

    2019年第一篇博客,在新的一年祝大家新年快乐,技术更上一层楼. 今天在公司搞了好长时间的nginx服务器搭建,以及遇到的问题,总结一下,方便查询 这里使用的是百度云的服务器,CentOS7系统的 N ...