黑马程序员__网络编程
来源:互联网 发布:fc2最新视频域名 编辑:程序博客网 时间:2024/05/27 00:46
---------- android培训、java培训、期待与您交流! ------------
UDP
将数据及源和目的封装成数据好中,不需要建立连接
每个数据报的大小在限制在64k内
因无连接,是不可靠协议
不需要建立连接,速度快
TCP
建立连接,形成传输数据的通道
在连接中进行大数据量传输
通过三次握手完成连接,是可靠协议
必须建立连接,效率会稍低
UDP案例
需求:通过udp传输方式,将一段文字数据发送出去。。
定义一个应用程序,用于接收UDP协议传输数据并处理
定义udp接收端
思路:
1.定义udpsocket服务,通常都监听一个端口,其实就是给这个接收网络应用程序定义一个数字标识。
方便与明确哪些数据过来应该用程序可以处理
2.定义一个数据包,因为要存储接收到的字节数据,因为数据包对象中有更多功能提取字节数据中的不同数
据信息。
3.通过socket服务的receive()方法将受到的数据存入定义好的数据包中。
4.通过数据包对象的特有功能,将这些不同的数据提取出,打印在控制台上。
5.关闭资源。
import java.net.DatagramPacket;
import java.net.DatagramSocket;
class UdpReceive {
public static void main(String[] args) throws Exception{
//1.创建UDP的socket服务。 建立端点
DatagramSocket ds = new DatagramSocket(10001);
//2定义一个数据包,用于存储数据。
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
//3通过服务的receive方法将收到的数据存入数据包中。
ds.receive(dp);//阻塞式方法。
//4.通过数据包的方法获取其中的数据。
String ip = dp.getAddress().getHostAddress();
String data = new String(dp.getData(),0,dp.getLength());
int port = dp.getPort();
System.out.println(ip +"...."+data+ "...."+port);
ds.close();
}
}
定义了发送端。
思路:
1.建立updsocket服务。
2.提供数据,并将数据封装到数据包中。
3.通过socket服务的发送功能,将数据包发出去。
4.关闭资源。
import java.net.*;
import java.io.*;
public class UdpSend {
public static void main(String[] args) throws Exception {
//1.创建udp服务。通过DatagramSocket对象。
DatagramSocket ds = new DatagramSocket();
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
String line = null;
while((line=bufr.readLine())!=null){
//2确定数据,并封装成数据包。
byte[] data = line.getBytes();
DatagramPacket dp = new DatagramPacket(data,data.length,InetAddress.getByName
("192.168.1.224"),10001);
//3.通过socket服务,将已有的数据包发送出去,通过send方法。
ds.send(dp);
}
//关闭资源
//ds.close();
}
}
TCP案例
需求:建立一个文本转换服务器。
客户端给服务端发送文本,服务端会将文本转换成大写返回给客户端。
而且客户端可以不断的进行文本转换。当客户端输入over时转换结束。
分析:
客户端:
既然是操作设备上的数据,那么就可以使用io技术,并按照io的操作规律思考。
源:键盘录入
目的:网络设备,网络输出流。
而且操作的是文本数据。可以选择字符流。
步骤:
1.建立服务。
2.将取键盘录入
3.将数据发给服务端。
4.后去服务端返回大写数据。
5.结束,关闭资源。
都是文本数据,可以使用字符流进行操作,同时可以提高效率,加入缓冲。
客户端:
import java.net.*;
import java.io.*;
public class TransTextClient {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
//建立Socket服务
Socket s = new Socket("118.230.3.62",10008);
//键盘录入
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
//自定义的,将数据写入到socket输出流,发给服务端
//BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter
(s.getOutputStream()));
PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
//定义一个socket读取流,读取服务端返回的大写信息
BufferedReader bufIn = new BufferedReader(new InputStreamReader
(s.getInputStream()));
String line = null;
while((line = bufr.readLine())!=null){
if("over".equals(line))
break;
pw.println(line);
// bufw.write(line);
// bufw.newLine();
// bufw.flush();
String str = bufIn.readLine();
System.out.println("server:" + str);
}
bufr.close();
s.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
服务端:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class TransTextServer {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
ServerSocket ss = new ServerSocket(10008);
Socket s = ss.accept();
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip + "....cennected.");
//读取socket读取流当中的数据
BufferedReader bufI = new BufferedReader(new InputStreamReader
(s.getInputStream()));
//目的。socket输出流将大写数据写入到socket输出流并发送给客户端
//BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter
(s.getOutputStream()));
PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
String line = null;
while((line = bufI.readLine())!=null)
{
pw.println(line.toUpperCase());
// bufOut.write(line.toUpperCase());
// bufOut.newLine();
// bufOut.flush();
}
s.close();
ss.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
* 该例子出现的问题。
* 现象:客户端和服务端都在莫名的等待。
* 为什么呢》?
* 因为客户端和服务端都有阻塞式的方法。这些方法么没读到结束标记。那么就一直等。而导致两端都在等待。
那我这里加了简单的if("over".equals(line)) break;语句了。
----------- android培训、java培训、期待与您交流! ----------
详细请查看:http://edu.csdn.net/heima
- 黑马程序员__网络编程
- 黑马程序员__网络编程
- 黑马程序员__网络编程
- 黑马程序员__网络编程
- 黑马程序员__网络编程
- 黑马程序员__网络编程
- 黑马程序员__网络编程
- 黑马程序员__网络编程小结
- 黑马程序员__JAVA基础__网络编程
- 黑马程序员Java基础__网络编程
- 黑马程序员__java基础__网络编程
- 【黑马程序员】网络编程
- 黑马程序员 网络编程
- 黑马程序员:网络编程
- 黑马程序员-------网络编程
- 黑马程序员-网络编程
- 黑马程序员:网络编程
- 黑马程序员--网络编程
- 用户登陆完整版———密码错误三次受限
- 第29次CNNIC报告:中国网民达5.13亿
- WIN7下配置JDK,成功编辑运行JAVA程序的过程
- Windows Phone的本地存储——IsolatedStorageSettings
- android上下有控件,列表在中间 布局
- 黑马程序员__网络编程
- Android学习笔记(四)-简单例子:电话拨号器与短信发送器
- C#、sql时间的计算
- 两个javascript对象与实例详解
- 黑马程序员--数据库概述,表,主外键,以及常用基本数据类型
- 软件模拟gpio 实现
- 数据库的联合查询及服务器时间登陆错误时间的间隔
- Windows Phone的本地存储——IsolatedStorageFile
- 深入浅出REST