IP:(Internet Protocol)
唯一标识网络上的每一台计算机
当前网络环境中当前主机的唯一标识
IP组成:
32位,由4个8位二进制数组成
IP地址:网络地址+主机地址
网络地址:标识计算机或网络设备所在的网络
主机地址:标识特定主机或网络设备
IP地址的配置和检测
查看本机的IP地址
ipconfig
测试网络是否通畅
ping 目标IP地址
Socket:
通信链路的端点就被称为“套接字”(英文名Socket)
是提供给应用程序的接口
基于TCP协议的Socket编程
基于TCP协议的Socket网络通信
用来实现双向安全连接网络通信
Socket通信模型
进行网络通信时,Socket需要借助数据流来完成数据的传递工作
Socket网络编程一般可以分成如下步骤进行
1.建立连接
2.打开Socket关联的输入输出流
3.数据流中读写信息
4.关闭所有的数据流和Socket
以下为代码示例:
//服务端
public class Server {
public static void main(String[] args) throws Exception {
ServerSocket sso = new ServerSocket(50002);
Socket socket = sso.accept();
System.out.println("连接成功");
final BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
final PrintWriter pw= new PrintWriter(socket.getOutputStream());
final BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
System.out.println("客户说:" + br.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
String str;
try {
str = input.readLine();
pw.println(str);
pw.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}).start();
}
}
//客户端
public class Client {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("localhost", 50002);
final BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
final PrintWriter pw = new PrintWriter(socket.getOutputStream());
final BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
System.out.println("服务说:" + br.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
String str;
try {
str = input.readLine();
pw.println(str);
pw.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}).start();
}
}
多线程处理多请求
采用多线程的方式
一个专门负责监听的应用主服务程序
一个专门负责处理请求的线程程序
以下为代码示例:
//用户类
public class User implements Serializable {
private String userName;
private String passWord;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public User() {
super();
}
public User(String userName, String passWord) {
super();
this.userName = userName;
this.passWord = passWord;
}
}
//处理请求的线程
public class LoginRunnable implements Runnable {
private Socket scoket;
public LoginRunnable() {
super();
// TODO Auto-generated constructor stub
}
public LoginRunnable(Socket scoket) {
super();
this.scoket = scoket;
}
@Override
public void run() {
try {
ObjectInputStream ois = new ObjectInputStream(scoket.getInputStream());
PrintWriter pw = new PrintWriter(scoket.getOutputStream());
User user = (User)ois.readObject();
if(user!=null){
pw.println(user.getUserName()+"登录成功");
pw.flush();
}else{
pw.println("登录失败");
pw.flush();
}
pw.close();
ois.close();
scoket.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//服务类
public class LoginServer {
public static void main(String[] args) throws Exception {
//1:创建serversocket对象
ServerSocket sso = new ServerSocket(50001);
//2.调用accpet方法建立连接
while(true){
Socket socket = sso.accept();
//3.包装流对象
LoginRunnable lr = new LoginRunnable(socket);
new Thread(lr).start();
}
}
}
//客户类
public class LoginNew {
public static void main(String[] args) throws Exception {
Socket scoket = new Socket("127.0.0.1",50001);
User user = new User("admin123","456789");
ObjectOutputStream oos = new ObjectOutputStream(scoket.getOutputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(scoket.getInputStream()));
oos.writeObject(null);
System.out.println(br.readLine());
}
}
//客户类
public class Login {
public static void main(String[] args) throws Exception {
Socket scoket = new Socket("127.0.0.1",50001);
User user = new User("admin","123456");
ObjectOutputStream oos = new ObjectOutputStream(scoket.getOutputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(scoket.getInputStream()));
oos.writeObject(user);
System.out.println(br.readLine());
}
}