黑马程序员_JAVA学习日记_JAVA中网络编程
来源:互联网 发布:画中字软件 编辑:程序博客网 时间:2024/05/17 04:16
黑马程序员-学习日记
黑马程序员_JAVA学习日记_JAVA中网络编程
------- android培训、java培训、期待与您交流! ----------
一:网络编程:
UDP:面向无连接,不可靠,速度快。相当于步话机。
TCP:面向连接,可靠,速度相对慢。相当于打电话。
udp发送端的思路:
1,建立udp的socket服务。
2,将要发送的数据封装成数据包。
3,通过udp的socket服务,将数据包发送取出。
4,建议关闭资源。
import java.net.*;
class SendDemo
{
public static void main(String[] args) throwsException
{
//1,建立udp服务。
DatagramSocket ds = new DatagramSocket();//发送端并没有指定端口,那么会自动分配一个端口。
//2,定义数据内容,并将数据封装成数据包。
byte[] buf = "udp 哥们 来了".getBytes();
DatagramPacket dp =
newDatagramPacket(buf,buf.length,InetAddress.getByName("192.168.54.9"),10000);
//3,通过udp的socket服务中的功能,完成数据包的发送。
ds.send(dp);
//4,关闭资源。
ds.close();
}
}
二:udp的接收端:
思路:
1,建立udpsocket服务。需要该应用程序定义数字标识,也就是端口,
也就是说:让该应用程序监听一个端口,只要是给这个端口发送的数据,
该应用程序就可以进行处理。
2,通过receive方法接收数据。
3,将收到的数据存储到数据包对象中。
4,通过数据包对象的功能来完成对接收到的数据进行解析。
5,可以对资源进行关闭。
class ReceDemo
{
public static void main(String[] args)throws Exception
{
//1,定义socket服务,并监听一个端口,明确哪些是是该应用程序可以处理的。
DatagramSocket ds = newDatagramSocket(10000);
while(true)
{
//2,预先定义好一个数据包。用于存储接收到的数据。
//因为数据包中必须有一个容器存储这些数据。所以要先定义字节数组。
byte[] buf = new byte[1024];
DatagramPacket dp = newDatagramPacket(buf,buf.length);
//3,使用socket服务的receive方法将接收到的数据,存储到数据包中。
ds.receive(dp);//该方法是阻塞式。
//4,通过数据包对象的方法获取其中的数据内容。包括,地址,端口,数据主体。
String ip =dp.getAddress().getHostAddress();
int port = dp.getPort();
String text = newString(dp.getData(),0,dp.getLength());
System.out.println(ip+":"+port+"....."+text);
}
//5,关闭资源。
//ds.close();
}
}
三:TCP:面向连接,可靠的协议。
客户端和服务端。
客户端:Socket
服务端:ServerSocket
客户端建立思路:
1,建立客户端的socket服务。并明确要连接的服务端。
因为只有建立了连接,才可以进行通讯。
2,如果连接建立成功,就表明,已经了数据传输的通道。就可以在该通道通过IO进行数据的读取和写入。
该通道称为socket流,socket流中既有读取流,也有写入流。
3,通过socket对象的方法。可以获取这两个流对象。
4,通过流对象就可以对数据进行传输。
5,如果传输数据完毕,关闭资源。
import java.io.*;
import java.net.*;
//通过客户端给服务端写数据。
class ClientDemo
{
public static void main(String[] args)throws Exception
{
//1,建立客户端socket服务。并去进行目的地址的连接。
Socket s = newSocket("192.168.54.9",10002);
//2,通过socket对象的方法getOutputStream获取输出流对象。
OutputStream out =s.getOutputStream();
//3,将数据写入流中。
out.write("TCP 哥们 又来了".getBytes());
//4,关闭资源
s.close();
}
}
四:建立服务端的思路:
1,建立服务端的socket服务。分配一个端口,用于监听该端口收到的数据。
2,服务端没有直接流的操作,而是通过accept方法获取客户端对象,
在通过获取到的客户端对象的流和客户端进行通讯。
3,通过客户端的获取流对象的方法,读取数据或者写入数据。
4,如果服务完成,需要关闭客户端,然后关闭服务端。
但是一般会关闭客户端,不关闭服务端,因为服务端是一值提供服务的。
class ServerDemo
{
public static void main(String[] args)throws Exception
{
//1, 建立服务端对象,监听一个端口。
ServerSocket ss = newServerSocket(10002);
//2,通过accept方法获取客户端对象。
Socket s = ss.accept();//该方法是阻塞式的。
String ip =s.getInetAddress().getHostAddress();
System.out.println(ip+".....connected");
//3,获取socket的读取流,读取客户端发送过来的数据。
InputStream in =s.getInputStream();
//4,就是读取数据的基本操作。
byte[] buf = new byte[1024];
int len = in.read(buf);
String text = newString(buf,0,len);
System.out.println(text);
s.close();
ss.close();
}
}
五:TCP:面向连接,可靠的协议。
客户端和服务端。
客户端:Socket
服务端:ServerSocket
import java.io.*;
import java.net.*;
class ClientDemo
{
public static void main(String[] args)throws Exception
{
Socket s = newSocket("192.168.54.9",10002);
OutputStream out =s.getOutputStream();
out.write("TCP 哥们 又来了".getBytes());
InputStream in =s.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
String text = newString(buf,0,len);
System.out.println("server:"+text);
s.close();
}
}
class ServerDemo
{
public static void main(String[] args)throws Exception
{
ServerSocket ss = newServerSocket(10002);
Socket s = ss.accept();//该方法是阻塞式的。
String ip =s.getInetAddress().getHostAddress();
System.out.println(ip+".....connected");
InputStream in =s.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
String text = newString(buf,0,len);
System.out.println(text);
OutputStream out =s.getOutputStream();
out.write("哥们已收到".getBytes());
s.close();
ss.close();
}
}
六:演示IP地址对象InetAddress的程序代码如下:
import java.net.*;
class IPDemo
{
public static void main(String[] args)throws Exception
{
method_3();
}
public static void method_3()throwsException
{
// /static InetAddress[]getAllByName(String host) 获取一个主机对应的所有IP地址.
// 如何获取一台主机的ip地址呢?
InetAddress ip =InetAddress.getByName("www.sina.com.cn");//没有连接成功,就会出现UnknownHostException
String addr = ip.getHostAddress();
String name = ip.getHostName();
System.out.println("addr:"+addr);
System.out.println("name:"+name);
}
public static void method_2() throwsException
{
InetAddress ip =InetAddress.getByName("192.168.54.12");
String addr = ip.getHostAddress();
String name = ip.getHostName();
System.out.println("addr:"+addr);
System.out.println("name:"+name);
}
public static void method_1() throwsException
{
InetAddress ip =InetAddress.getLocalHost();
String addr = ip.getHostAddress();
String name = ip.getHostName();
System.out.println("addr:"+addr);
System.out.println("name:"+name);
}
}
import java.net.*;
import java.io.*;
七:通过键盘录入的方式来发送数据。
class SendDemo
{
public static voidmain(String[] args) throws Exception
{
DatagramSocket ds = new DatagramSocket();//发送端并没有指定端口,那么会自动分配一个端口。
BufferedReader bufr =
new BufferedReader(newInputStreamReader(System.in));
String line = null;
while((line=bufr.readLine())!=null)
{
byte[] buf = line.getBytes();
DatagramPacket dp =
new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.54.127"),10000);
ds.send(dp);
if("886".equals(line))
break;
}
ds.close();
}
}
class ReceDemo
{
public static voidmain(String[] args) throws Exception
{
DatagramSocket ds = newDatagramSocket(10000);
while(true)
{
byte[] buf = new byte[1024];
DatagramPacket dp = newDatagramPacket(buf,buf.length);
ds.receive(dp);//该方法是阻塞式。
String ip =dp.getAddress().getHostAddress();
int port = dp.getPort();
String text = newString(dp.getData(),0,dp.getLength());
System.out.println(ip+":"+port+"....."+text);
}
//ds.close();
}
}
import java.io.*;
import java.net.*;
class Receimplements Runnable
{
privateDatagramSocket ds;
Rece(DatagramSocketds)
{
this.ds = ds;
}
public void run()
{
try
{
while(true)
{
byte[] buf = newbyte[1024];
DatagramPacket dp = newDatagramPacket(buf,buf.length);
ds.receive(dp);
String ip =dp.getAddress().getHostAddress();
int port = dp.getPort();
String text = newString(dp.getData(),0,dp.getLength());
System.out.println(ip+":"+port+"....."+text);
if(text.equals("886"))
{
System.out.println(ip+"...离开聊天室");
}
}
}
catch (Exception e)
{
throw new RuntimeException("接收失败");
}
}
}
class Sendimplements Runnable
{
privateDatagramSocket ds;
Send(DatagramSocketds)
{
this.ds = ds;
}
public void run()
{
try
{
BufferedReader bufr =
newBufferedReader(new InputStreamReader(System.in));
String line = null;
while((line=bufr.readLine())!=null)
{
byte[] buf =line.getBytes();
DatagramPacket dp =
newDatagramPacket(buf,buf.length,InetAddress.getByName("192.168.54.127"),10001);
ds.send(dp);
if("886".equals(line))
break;
}
ds.close();
}
catch (Exception e)
{
throw new RuntimeException("发送失败 ");
}
}
}
class ChatDemo
{
public static voidmain(String[] args) throws Exception
{
DatagramSocket sendSocket = newDatagramSocket();
DatagramSocket receSocket = newDatagramSocket(10001);
new Thread(new Send(sendSocket)).start();
new Thread(new Rece(receSocket)).start();
}
}
------- android培训、java培训、期待与您交流! ---------- 详细请查看:http://edu.csdn.net/heima/
- 黑马程序员_JAVA学习日记_JAVA中网络编程
- 黑马程序员_java学习日记_Java高新技术_网络编程
- 黑马程序员_java学习日记_网络编程
- 黑马程序员-学习日记_JAVA中异常
- 黑马程序员_JAVA学习日记_JAVA中图形化界面GUI编程
- 黑马程序员_java网络编程学习笔记
- 黑马程序员_java网络编程学习
- 黑马程序员_JAVA学习之网络编程
- 黑马程序员_Java 网络编程
- 黑马程序员_Java网络编程
- 黑马程序员_java网络编程
- 黑马程序员_java网络编程
- 黑马程序员_Java网络编程
- 黑马程序员_java网络编程
- 黑马程序员_java 网络编程
- 黑马程序员_java网络编程
- 黑马程序员_java网络编程
- 黑马程序员_java 网络编程
- paip.图片文件上传功能总结
- 【100题】第四十九题 排序,要求时间复杂度O(n),空间复杂度O(1)
- 微信朋友圈分享的手机网站里的链接打不开呢?提示的是预览模式
- PHP中文乱码的常见解决方法总结
- name service cache daemon
- 黑马程序员_JAVA学习日记_JAVA中网络编程
- 悲剧的程序员用程序写出的爱情
- 高清动漫mm赏析(七)
- Poj 2352 Stars 题解
- ArtDialog
- 什么是创新,什么是发明
- 程序员每日一笑之女人如语言
- 高清动漫mm赏析(八)
- 向架构师进军--->架构方法基本原理