java网络编程
来源:互联网 发布:js .index 编辑:程序博客网 时间:2024/05/01 19:17
网络通信
1.找到对方Ip,数据要发送到对方指定的应用程序上,为了标识这些应用程序,所以给这些网络应用程序
都用数字进行标识,为了方便称呼这个数字,叫做端口,逻辑端口。定义通信规则,这个通训规则称为协议,国际组织定义了通用协议tcp/ip(应用层(HTTP)、传输层(TCP、UDP)、网际层(ip)、网络接口层)
IP地址:主机名:localhost 本地回环地址127.0.0.1
对象:InetAddress
端口号: 有效端口0-65535(用于标识进程的逻辑地址,不同进程的标识)
UDP: 将数据及源和目的封装成数据包,不需要连接,每个数据报的大小在限制的64K内,因无连接,是不可靠协议
不需要连接,速度快。
(聊天,数据共享)面向无连接
TCP:建立连接,形成传输数据的通道,在连接中进行大数据量传输,通过3次握手完成连接,是可靠协议,必须建立连接
效率会稍低。(打电话,)
Socket: UDP传输:
Socket: TCP传输
1. 客户端的Socket类
服务器端的ServerSocket类
2.打开连接到Socket的输入、输出流
3.按照协议对Socket进行读、写操作
4.关闭输入输出流,关闭Soket
server.java
package test1;
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.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
/*
* 基于TCP协议的Socket通信,实现用户登陆
* 服务器端
*/
public class Server {
public static void main(String[] args) {
try {
//1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口
ServerSocket serverSocket=new ServerSocket(8888);
Socket socket=null;
//记录客户端的数量
int count=0;
System.out.println("***服务器即将启动,等待客户端的连接***");
//循环监听等待客户端的连接
while(true){
//调用accept()方法开始监听,等待客户端的连接
socket=serverSocket.accept();
//创建一个新的线程
ServerThread serverThread=new ServerThread(socket);
//启动线程
serverThread.start();
count++;//统计客户端的数量
System.out.println("客户端的数量:"+count);
InetAddress address=socket.getInetAddress();
System.out.println("当前客户端的IP:"+address.getHostAddress());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
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.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
/*
* 基于TCP协议的Socket通信,实现用户登陆
* 服务器端
*/
public class Server {
public static void main(String[] args) {
try {
//1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口
ServerSocket serverSocket=new ServerSocket(8888);
Socket socket=null;
//记录客户端的数量
int count=0;
System.out.println("***服务器即将启动,等待客户端的连接***");
//循环监听等待客户端的连接
while(true){
//调用accept()方法开始监听,等待客户端的连接
socket=serverSocket.accept();
//创建一个新的线程
ServerThread serverThread=new ServerThread(socket);
//启动线程
serverThread.start();
count++;//统计客户端的数量
System.out.println("客户端的数量:"+count);
InetAddress address=socket.getInetAddress();
System.out.println("当前客户端的IP:"+address.getHostAddress());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.serverThread.java
package test1;
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.Socket;
/*
* 服务器线程处理类
*/
public class ServerThread extends Thread {
// 和本线程相关的Socket
Socket socket = null;
public ServerThread(Socket socket) {
this.socket = socket;
}
//线程执行的操作,响应客户端的请求
public void run(){
InputStream is=null;
InputStreamReader isr=null;
BufferedReader br=null;
OutputStream os=null;
PrintWriter pw=null;
try {
//获取输入流,并读取客户端信息
is = socket.getInputStream();
isr = new InputStreamReader(is);
br = new BufferedReader(isr);
String info=null;
while((info=br.readLine())!=null){//循环读取客户端的信息
System.out.println("我是服务器,客户端说:"+info);
}
socket.shutdownInput();//关闭输入流
//获取输出流,响应客户端的请求
os = socket.getOutputStream();
pw = new PrintWriter(os);
pw.write("欢迎您!");
pw.flush();//调用flush()方法将缓冲输出
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//关闭资源
try {
if(pw!=null)
pw.close();
if(os!=null)
os.close();
if(br!=null)
br.close();
if(isr!=null)
isr.close();
if(is!=null)
is.close();
if(socket!=null)
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
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.Socket;
/*
* 服务器线程处理类
*/
public class ServerThread extends Thread {
// 和本线程相关的Socket
Socket socket = null;
public ServerThread(Socket socket) {
this.socket = socket;
}
//线程执行的操作,响应客户端的请求
public void run(){
InputStream is=null;
InputStreamReader isr=null;
BufferedReader br=null;
OutputStream os=null;
PrintWriter pw=null;
try {
//获取输入流,并读取客户端信息
is = socket.getInputStream();
isr = new InputStreamReader(is);
br = new BufferedReader(isr);
String info=null;
while((info=br.readLine())!=null){//循环读取客户端的信息
System.out.println("我是服务器,客户端说:"+info);
}
socket.shutdownInput();//关闭输入流
//获取输出流,响应客户端的请求
os = socket.getOutputStream();
pw = new PrintWriter(os);
pw.write("欢迎您!");
pw.flush();//调用flush()方法将缓冲输出
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//关闭资源
try {
if(pw!=null)
pw.close();
if(os!=null)
os.close();
if(br!=null)
br.close();
if(isr!=null)
isr.close();
if(is!=null)
is.close();
if(socket!=null)
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
3.client.java
package test1;
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.Socket;
import java.net.UnknownHostException;
public class Client {
public static void main(String[] args) {
//1.创建客户端Socket,指定服务器地址和端口
try {
Socket Socket =new Socket("localhost",8888);
//获取输出来,向服务器端发送信息
OutputStream os=Socket.getOutputStream();
//将输出流包装成打印流
PrintWriter pw=new PrintWriter(os);
pw.write("用户名:tom;密码:785");
pw.flush();
Socket.shutdownOutput();
//获取输入流,读取服务器端响应信息
InputStream is=Socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String info = null;
// 循环读取服务器端信息
while ((info = br.readLine()) != null) {
System.out.println("我是客户端,服务器说" + info);
}
//关闭资源
os.close();
is.close();
br.close();
pw.close();
Socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
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.Socket;
import java.net.UnknownHostException;
public class Client {
public static void main(String[] args) {
//1.创建客户端Socket,指定服务器地址和端口
try {
Socket Socket =new Socket("localhost",8888);
//获取输出来,向服务器端发送信息
OutputStream os=Socket.getOutputStream();
//将输出流包装成打印流
PrintWriter pw=new PrintWriter(os);
pw.write("用户名:tom;密码:785");
pw.flush();
Socket.shutdownOutput();
//获取输入流,读取服务器端响应信息
InputStream is=Socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String info = null;
// 循环读取服务器端信息
while ((info = br.readLine()) != null) {
System.out.println("我是客户端,服务器说" + info);
}
//关闭资源
os.close();
is.close();
br.close();
pw.close();
Socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
0 0
- 【网络编程】JAVA网络编程
- java网络编程:网络基本概念
- Java网络编程-UDP编程
- Java 高层网络编程
- Java网络编程2
- Java网络编程3
- Java网络编程4
- Java网络服务器编程
- java网络编程1
- java网络编程2
- JAVA网络编程
- Java网络服务器编程
- java网络编程
- Java 高层网络编程
- Java 高层网络编程
- Java网络服务器编程
- Java网络编程
- JAVA网络编程
- HDU 4336 Card Collector [概率DP]
- Qt从零开始制作串口调试助手-(第十二章、串口数据发送)-Creator_Ly
- 博客地址迁移
- PackageManager 获取系统安装包信息
- Servlet原理
- java网络编程
- 情有独钟
- 【Java】Java之经典循环小例子
- StringBuffer和StringBuilder
- [JSP]JSP基本元素以及和Servlet的对应关系
- super.this.static.final
- Hadoop重启后提示xxx is in safe mode.
- String详解
- windows下查看 mysql二进制日志文件