java socket网络编程 模拟2个机器人对话
前言
前面1.8 节,介绍了2个线程的通信,模拟了2个机器人对话。
这节介绍2台电脑之间的通信,2台电脑通信需要用到网络。
socket(译为套接字),是应用程序和网络通信协议进行交互的接口,它向上为用户(应用程序)提供操作网络的方法,向下实现与tcp/ip网络协议栈的对接。
提示:这节通过一个例子介绍使用java socket实现2台主机网络通信的基本方法。
一、编写服务器端程序
1、在IDEA中新建工程:socket-server,位置:E:\new\1.12\socket-server
2、新建包 com.my.socket
如下图:
3、新建Server类,这是一个继承了Thread的线程类。代码如下:
package com.my.socket;
import java.io.*;
import java.net.*;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Server extends Thread{
//**服务器启动时占用的端口号:默认5001*/
private int port=5001;
//server的名字
private String name = "";
//缓存从socket读的一行数据
private String inLine ="";
//缓存写入socket的一行数据
private String outLine = "";
//格式化日期显示
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
/**
* Server 类的构造函数,
* @param name server的名字
* @param port server监听的端口号
*/
public Server(String name,int port){
this.name = name;
this.port = port;
this.setName(name);
}
public void run(){
try {
System.out.println(name+":我准备好了。");
// 创建一个服务器端的Socket:ServerSocket
ServerSocket serverSocket = new ServerSocket(port);
// accept(),使程序阻塞监听 端口 port,有连接申请时,就会得到一个Socket对象。
Socket socket = serverSocket.accept();
//从socket里读取数据的流
BufferedReader socketIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//向socket里写数据的流
PrintWriter socketOut = new PrintWriter(socket.getOutputStream());
//控制对话结束标志
boolean chatting = true;
while(chattin