网络编程
1,IP地址
2,端口
3,协议
UDP&TCP
1,创建UDP传输的发送端
思路:1,建立udp的socket服务;2,将要发送的数据封装到数据包,使用DatagramPacket对象将数据封装到改对象啊中;3,通过udp的socket服务将数据包发送出去;4,关闭socket服务。
1,建立udp的socket服务
DatagramSocket ds = new DatagramSocket();
2,将要发送的数据封装到数据包中
/*String str = "udp传输演示,”;
// 使用DatagramPacket对象将数据封装到对象包中
byte[] buf = str.getBytes();*/
BufferReader bufr = new bufferedReader(new InputStreamReader(System.in));
String line = null;
while((line=buffr.readLine())!=null){
byte[] buf = line.getBytes();
DatagramPacket dp =
new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.100"),10000);
ds.sed(sp);
if("886".eauals(line))
break;
}
/*DatagramPacket dp =
new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.100"),10000);
new DatagramPacket(数据数组,数据大小,iP对象,端口号);
3,通过udp的socket服务将数据包发送出去;
ds.send(dp);*/
4,关闭socket服务
ds.close();
2,创建UDP传输的接收端
1,建立udp socket服务;2,创建数据包,用于存储接收到的数据。方便用数据包对象的方法解析接收到的数据;3,使用socket服务的receive方法将接受到的数据存储到数据包中。4,通过数据包的方法解析数据包中的服务;5,关闭资源。
1,建立udp socket服务
DatagramSocket ds = new DatagramSocket(10000);
2,创建数据包
byte[] buf = new byte[1024];
Datagrampacket dp = new DatagramPacket(buf,buf.length);
3,使用socket服务的receive方法将接收到的数据存储到数据包中
ds.receive(dp);
4,通过数据包对象的方法,解析其中的数据,比如,地址,端口,数据内容。
String ip = dp.gerAddress().getHostAddress();
int port = dp.getPort();
String text = new String(dp.getData(),0,dp.getlength());
5,关闭资源
ds.close();
TCP
1,客户端发数据到服务端
Tcp传输,客户端建立的过程。
1,创建tcp客户端socket服务,使用的是socket对象。
建议该对象一创建就明确目的地。要连接的主机。
2,如果连接建立成功,说明数据传输通道已建立
该通道就是socket流,是底层建立好的。既然是流,说明这里既有输入,又有输出。
想要输入或者输出流对象,可以找socket来获取。
可以通过getOutputStream()和getInputStream()来获取两个字节流。
3,使用输出流,将数据写出。
4,关闭资源。
1,创建客户端服务
Socket socket = new Socket("192.168.1.100",10002);
2,获取socket流中的输出流
OutputStream out = socket.getOutputStream();
使用输出流将指定的数据写出
out.write("tcp演示:哥们来了!”);
2.1,读取服务端返回的数据,使用socket读取流。
InputStream in = socket.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
String text = new String(buf,0,len);
System.out.println(text);
3,关闭资源
socket.close();
2,服务端接收数据
1,创建服务端socket服务。通过ServerSocket对象。
2,服务端必须对外提供一个端口,否则客户端无法连接。
3,获取连接过来的客户端对象。
4,通过客户端对象获取socket流读取客户端发来的数据。并打印在控制台上。
5,关闭资源。关客户端,关服务器。
1,创建服务端对象
ServerSocket ss = new ServerSocket(10002);
2,获取连接过来的客户端对象
Socket s = ss.accept();//阻塞式
3,通过socket对象获取输入流,要读取客户端发来的数据
InputStream in =s.gerInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
String text = new String(buf,0,len);
System.out.println("server:"+text);
3.1,使用客户端socket对象的输出流给客户端返回数据
OutputStram out = s.getOutputStream();
out.write("收到”.getBytes());
4,关闭资源
s.close();
ss.close();
3,tcp C/S例子:客户端发送字母数据到服务端,服务端经过大小写转换返回给客户端,并等待客户端OVER响应。
1,客户端代码
public class TransClient{
public static void main(String[] args){
//客户端
//1,需要现有socket端点;2,客户端的数据源:键盘;3,客户端的目的:socket;4,接收服务端的数据,源:socket;5,将数据显示到控制台,目的:控制台;6,在这些流中操作的数据都是文本数据。
//转换客户端
//1,创建socket客户端对象;2,获取键盘录入;3,将录入的信息发送给socket输出流。
//1,创建socket客户端对象。
Socket s = new Socket("192.168.1.100",1004);
//2,获取键盘录入
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
//3,socket输出流
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
//4,socket输入流,读取服务端返回的大写数据
BufferedReader burIn =
new BufferedReader(new InputStreamReader(s.getInputStream()));
String line = null;
while(line=buffr.readLine())!=null){
if("over".equals(line))
break;
out.println(line);
//读取服务端返回的大写数据
String uperStr = bufIn.readLine();
System.out.println(upperStr);
}
s.close();
}
}
2,服务端代码
public class TransServer{
public static void main(String[] args){
//装换服务端
//1,ServerSocket服务;2,获取socket对象;3,源:socket,读取客户端发过来的需要转换的数据;4,目的:显示在控制台上;5,将数据转化大写,发给客户端;
//1,创建ServerSocket服务
ServerSocket ss = new ServerSoket(10004);
//2,获取socket对象
Socket s = ss.accept();
//获取IP
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip+".......connected");
//3,获取socket读取流,并装饰
BufferedReader bufIn =
new BufferedReader(new InputStreamReader(s.getInputStream()));
//4,获取socket的输出流,并装饰
PrintWrinter out = new PrintWriter(s.getOutputStream(),true);
String line = null;
while(line=bufIn.readLine())!=null){
System.out.println(line);
out.println(line.toUpperCase());
}
s.close();
ss.close();
}
}