您的位置:首页 > 理论基础 > 计算机网络

java笔记—网络通信socket的例子

2016-06-15 00:00 666 查看

Java Socket应用 网络通信 【 socket 】

第一节:网络基础知识
第二节:InetAddress 类:
此类表示互联网协议 (IP) 地址。

InetAddress 的实例包含 IP 地址,还可能包含相应的主机名(取决于它是否用主机名构造或者是否已执行反向主机名解析)。

例子:

package inetaddreaa;

import java.net.InetAddress;
import java.net.UnknownHostException;

public class InetAddressDom {

public static void main(String[] args) {

try {
//根据本机 InetAddreaa 获取信息
InetAddress address = InetAddress.getLocalHost();
System.out.println("本机名字:" + address.getHostName());
System.out.println("IP地址:" + address.getHostAddress());
System.out.println("对象的原始 IP地址:"+address.getAddress());
//看API文档

} catch (UnknownHostException e) {
e.printStackTrace();
}
}

}


第三节:URL常用使用方法:
理解:URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。基本URL包含模式(或称协议)、服务器名称(或IP地址)、路径和文件名。
协议为: http (超文本传输协议)。
资源:www.imooc.com

端口:8080

例子:

package url;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

public class URLDom {
public static void main(String[] args) {

try {
//实例化URL
URL url= new URL("http://www.baidu.com");
//输入流
InputStream is = url.openStream();
//将输入流转换为字符流
InputStreamReader isr = new InputStreamReader(is,"utf-8");
//为字符流添加缓冲流
BufferedReader br = new BufferedReader(isr);
//读取数据
String date = br.readLine();
//输出 行
while( date != null ){
System.out.println(date);
date=br.readLine();
}
//关闭资源
br.close();
isr.close();
is.close();

} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}

}


第四节:TCP 编程 【 传输控制协议 】
概念:传输层,以字节流的方式发送数据。
是一种面向连接的、可靠的、基于字节流的传输层通信协议。
服务器端【ServerSocket】
1.创建服务器端,并制定绑定端口。
2.调用 accept() 方法调用 accept() 方法侦听并接受的连接。
3.获取输入流,并读取客户端信息。
4.获取输出流,向客户端端发送信息 。
5.先关闭输入流,关闭资源。
客户端【Socket】
1.创建客户端,制定服务器地址和端口 。
2.获取输出流,向服务器端发送信息 。
3.获取输入流,并读取服务器信息。
4.先关闭输出流,流关闭资源。
TCP 编程之多线程连接:
基本步骤:
1.服务器端创建ServerSocket,循环调用accept() 等待客户端连接。
2.客户端很粗昂贱一个socket并请求和服务器端连接。
3.服务器端接受客户端的请求,创建socket与客户端建立专线连接。
4.建立连接的两个socket在一个单独的线程上对话。

5.服务器端需继续等待新的连接。

例子:

1、服务器端

package tcp;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

public static void main(String[] args) {

try {
//1创建服务器,并制定绑定端口
ServerSocket ss = new ServerSocket(8080);
//2调用accept()方法侦听并接受的连接。
System.out.println("***服务器已经启动,等待客户端连接***");
Socket sk = ss.accept();
//3获取输入流,获取客户端信息
InputStream is = sk.getInputStream();
//转换字符流
InputStreamReader isr = new InputStreamReader(is);
//4为输入流添加缓冲
BufferedReader br = new BufferedReader(isr);
//输出
String io=null;
//5获取客户端信息
while( (io=br.readLine()) != null){
System.out.println("我是服务器,然后客户端说:" + io);
io=br.readLine();
}
//关闭输入流
sk.shutdownInput();

//获取输出流,向客户端发送信息
OutputStream ops= sk.getOutputStream();
//打印流
PrintWriter pw = new PrintWriter(ops);
pw.write("您好!欢迎您!");
//清空缓冲区数据
pw.flush();

//关闭资源
ops.close();
pw.close();
br.close();
isr.close();
is.close();
sk.close();
ss.close();

} catch (IOException e) {
e.printStackTrace();
}

}

}

2、客户端

package tcp;

import java.io.*;
import java.net.*;

//还有一种就是和多线程结合在一起

public class ServerConter {

public static void main(String[] args) {

try {
//创建客户端Socket,指定服务器端口,地址
Socket sr = new Socket("localhost",8080);
//获取输出流,向服务器发送信息
OutputStream ops = sr.getOutputStream();
//打印流
PrintWriter pw = new PrintWriter(ops);
//字符输出流
pw.write("用户名:陈郑游;密码:123");
//清空缓冲区数据
pw.flush();
//关闭输出流
sr.shutdownOutput();

//获取输入流,读取服务器的信息
InputStream ips = sr.getInputStream();
//InputStreamReader isr = new InputStreamReader(ips);
BufferedReader buf = new BufferedReader(new InputStreamReader(ips));
String io=null;
//获取客户端信息
while( (io=buf.readLine()) != null){
System.out.println("我是客户端,然后服务器说:" + io);
io=buf.readLine();
}
//关闭资源
ips.close();
buf.close();
pw.close();
ops.close();
sr.close();

} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}

}


第五节:UDP 编程

理解:UDP协议是无连接,不可靠,无序的。

DategramPacket:数据包

DataGrmSocket:进行通信到端口的通信的类

实现步骤:

服务器端:

1,创建DatagramSocket,指定端口号。

2,创建DatagramPacket。

3,接受客户端发送的数据信息。

4,读取客户端数据。

5,关闭资源。

客户端:

1,定义服务器的地址,端口号,数据,发送信息。

2,创建DatagramPacket,包含将要发送的信息。

3,创建DatagramSocket。

4,向服务器端发送数据。

5,关闭资源。

例子:

1、服务器端

package udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class Server {
public static void main(String args[]){

try {
/*接收客户端响应*/
//1,创建DatagramSocket,指定端口号。
DatagramSocket socket = new DatagramSocket(8888);
//2,创建DatagramPacket。
byte date[] = new byte[1020];
DatagramPacket packet = new DatagramPacket(date, date.length);
System.out.println("***服务器已经启动,等待客户端连接***");
//3,接受客户端发送的数据信息。
socket.receive(packet); //接收之前一直堵塞
//4,读取数据。
String info = new String(date, 0, packet.getLength());
System.out.println("我是服务器,客户端说:" + info);
//
socket.close();

/*向客户端发送响应*/
//1,定义客户端的地址,端口号,数据,发送信息。
InetAddress iass = packet.getAddress();
//地址
int port=8888;
byte date2[] ="服务器说:欢迎您!".getBytes();  //转换为字节数组
//2,创建DatagramPacket,包含将要发送的信息。
DatagramPacket packet1 = new DatagramPacket(date2, date2.length, iass, port);
//3,创建DatagramSocket。
DatagramSocket soc = new DatagramSocket();
//4,向客户端端发送数据。
soc.send(packet1);

}
catch (SocketException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}

}


2、客户端

package udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

public class Socket {

public static void main(String[] args) {

try {
/*向服务器端发送响应*/
//1,定义服务器的地址,端口号,数据,
InetAddress inet =InetAddress.getByName("localhost");
//地址
int port=8888;
byte date1[] ="用户名:小游;密码:888".getBytes();  //转换为字节数组
//2,创建DatagramPacket,包含将要发送的信息。
DatagramPacket packet = new DatagramPacket(date1, date1.length, inet, port);
//3,创建DatagramSocket。
DatagramSocket socket = new DatagramSocket();
//4,向服务器端发送数据。
socket.send(packet);

/*接收服务器端的响应*/
byte date2[] = new byte[1020];
//1,创建DatagramPacket。
DatagramPacket packet2 = new DatagramPacket(date2, date2.length);
//2,接受服务器端发送的数据信息。
socket.receive(packet2);
//3,读取数据。
String info2 = new String(date2, 0, packet2.getLength());
System.out.println("我是客户端,服务器说:" + info2);
//4,关闭资源
socket.close();

}
catch (UnknownHostException e) {
e.printStackTrace();
}
catch (SocketException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: