笔记整理:建立客户服务对话,采用流通道建立连接,使用ServerSocket类,创建的对象被Socket监听器 监听,建立阻塞等待用户端口接入(客户端,创建Socket监听器,将服务端的ip与端口号提供,建立了连接)
建立通信:客户端,服务端分别采用 输入输出流,发送请求,接收请求,达到互联的目的。
* @param args
* 客户端请求服务器
* 创建Socket。指定服务器IP+端口号
* 使用输出流,发送请求数据给服务器
* 使用输入流,接受响应数据到客户端(等待)
*
* 服务器响应客户端
* 使用输入流,接受请求数据到服务器(等待)
* 使用输出流,发送响应数据给客户端
* @throws UnknownHostException
*/下面代码实现客户端与服务端基本互联
public class ServerDemo {
public static void main(String[] args) throws UnknownHostException {
// Socket编程-Server
InetAddress host = InetAddress.getLocalHost();//获取ip及端口
String ip =host.getHostAddress();
System.out.println("本机ip地址:" + ip);
try {
ServerSocket serversocket =new ServerSocket(9999);
System.out.println("服务端启动,等待客户连接~~~~~~");
Socket server = serversocket.accept();//这是个阻塞,客户端来了才会运行
//这里服务器启动,等待客户端加入
System.out.println("连接过来了"+server);//客户端加入打印
System.out.println("客户端连接好了!");
InputStream is = server.getInputStream();
server.close();
serversocket.close();
}catch(IOException e){
}
}
}
//**************************************************************
public class ClientDemo {
public static void main(String[] args) {
// Socket编程 -Client
String ip ="127.0.0.1";//服务器ip
int port =9999;//服务器端口
try {
Socket client = new Socket(ip,port);
InputStream is =client.getInputStream();
BufferedReader br =new BufferedReader(new InputStreamReader(is));
String rl =br.readLine();
System.out.println("服务器发来的消息"+rl);
OutputStream os = (OutputStream) client.getOutputStream();
String msg ="Look this, I'm here! \n";
os.write(msg.getBytes());
os.flush();
}catch(UnknownElementException e){
}catch(IOException e) {
}
}
}
下面是实现简易通信
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.net.ServerSocket;
import java.net.Socket;
public class DemoServer {
public static void main(String[] args) {
// Server
try {
ServerSocket serverSocket =new ServerSocket(8888);//创建端口
System.out.println("服务器已启动,等待客户连接···············");
Socket server = serverSocket.accept();
System.out.println(serverSocket.isBound());
//服务器准备好要发送的内容通过字符输出缓冲流
OutputStream ops = server.getOutputStream();
BufferedWriter bfw =new BufferedWriter(new OutputStreamWriter(ops));
String strs ="复仇者联盟 纪念手办:队长,免费送要不要!\n";
bfw.write(strs);
bfw.flush();
//服务器接收客户端发来的消息,通过字符缓冲输入流
InputStream ism = server.getInputStream();
InputStreamReader isr =new InputStreamReader(ism);
BufferedReader bfd = new BufferedReader(isr);//字符缓存读取流
String sig =bfd.readLine();
System.out.println("客户端Server说:"+sig);
// server.close();
// serverSocket.close();
System.out.println("已收到来自用户的问候!"+server);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//******************************************************************
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
public class DemoClient {
public static void main(String[] args) {
// Client
try {
Socket socket =new Socket("127.0.0.1",8888);
System.out.println("找到了该端口,端口:"+socket);
InetAddress ia = socket.getInetAddress();//获取IP,主机地址的方法
//客户端通过字符输入缓冲流 读取服务器内容
InputStream ism =socket.getInputStream();
BufferedReader bfd =new BufferedReader(new InputStreamReader(ism));
String strt =bfd.readLine();
System.out.println("服务器Server说:"+strt);
//客户通过字符输出缓冲流编辑内容发送服务器
OutputStream ops =socket.getOutputStream();
OutputStreamWriter isr =new OutputStreamWriter(ops);
BufferedWriter bfw = new BufferedWriter(isr);
String str ="好久不见,别来无恙 \n";//客户Client说
bfw.write(str);
bfw.flush();
socket.close();
System.out.println("客户端消息发送成功!服务器名称:"+ia.getHostName()+",ip:"+ia.getHostAddress());
bfw.close();
} catch (UnknownHostException e) {
e.printStackTrace();
}catch(IOException e) {
}
}
}