tracert 10.145.204.165 查询网段哪里有问题
服务器端Socket
ServerSocket
new ServerSocket(端口号)
accept ( )
暂停等待客户端发起连接,并建立连接通道
返回连接通道的服务端插头
Socket 对象
close( )
释放端口,停止服务
客户端Socket
Socket
new Socket(ip , 端口)
向指定服务器指定端口发起连接,并建立连接通道
getInputStream
getOutputStream
取出连接通道中,用来通信的流
Demo1
服务器端
package cn.tedu;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server1 {
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(8000);
System.out.println("服务已启动");
//等待客户端发起连接请求,并建立连接通道
Socket s = ss.accept(); //发生阻塞,只有当客户端启动之后,才开始执行以下过程
System.out.println("客户端已连接");
//从Socket连接通道,获取流
InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();
/**
* 通信协议
* 通信流程、数据格式
* 1.接收5个字符Hello
* 2.向对方发送5个字符 world
*/
for(int i=0;i<5;i++){
char c=(char) in.read();
System.out.print(c);
}
out.write("world".getBytes());
out.flush();//刷出缓存
s.close();//断开连接
ss.close();//停止服务,释放端口
}
}
客户端
package cn.tedu;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class Client1 {
public static void main(String[] args) throws Exception {
//本机回环ip
//127.0.0.1
//localhost
//客户端
//如果不出异常,就已经建立了连接通道
Socket s = new Socket("127.0.0.1", 8000);
InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();
/**
* 通信协议
* 通信流程、数据格式
* 1.发送5个字符Hello
* 2.接收5个字符 world
*/
out.write("Hello".getBytes());
out.flush();
for (int i=0;i<5;i++){
char c=(char) in.read();
System.out.print(c);
}
s.close();//断开连接
}
}
Demo2
服务器端
package cn.tedu2;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class EchoServer {
public void start(){
//新启线程,循环执行accept()
new Thread(){
@Override
public void run(){
try{
ServerSocket ss = new ServerSocket(8000);
System.out.println("服务已启动");
while (true){
Socket s = ss.accept();
//Socket连接通道,交给线程
//来执行通信过程
TongxinThread t = new TongxinThread(s);
t.start();
}
}catch (Exception e){
System.out.println("端口被占用,或者服务已停止");
}
}
}.start();
}
class TongxinThread extends Thread{
Socket s;
public TongxinThread(Socket s) {
this.s = s;
}
@Override
public void run(){
try {
/**
* 通信协议
*
* 流程
* 1.接收
* 2.发送
*
* 数据格式
* 1.GBK编码字符
*2.一行文本,末尾要有一个换行符
*
* BufferedReader--InputStreamReader-- 网络流输入流
* PrintWriter-- OutputStreamWriter-- 网络流输出流
*
*
*/
BufferedReader in=new BufferedReader(
new InputStreamReader(
s.getInputStream(),"GBK"));
PrintWriter out=new PrintWriter(
new OutputStreamWriter(s.getOutputStream(),"GBK"));
String line;
while((line = in.readLine()) !=null){
out.println(line);
out.flush();
System.out.println(line);
}
}catch (Exception e){
}
System.out.println("客户端已断开");
}
}
public static void main(String[] args) {
EchoServer server=new EchoServer();
server.start();
}
}
客户端
package cn.tedu2;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class EchoClient {
public void start(){
try {
//连接服务器
Socket s= new Socket("localhost", 8000);
BufferedReader in=new BufferedReader(
new InputStreamReader(
s.getInputStream(),"GBK"));
PrintWriter out=new PrintWriter(
new OutputStreamWriter(s.getOutputStream(),"GBK"));
while (true){
System.out.println("输入(exit退出):");
String str = new Scanner(System.in).nextLine();
if ("exit".equals(str)){
s.close();//断开连接
break;
}
//把str发送到服务器
out.println(str);
out.flush();
//接收回声数据
String echo = in.readLine();
System.out.println("回声:"+echo);
}
}catch (Exception e){
}
System.out.println("已经与服务器断开连接");
}
public static void main(String[] args) {
EchoClient client = new EchoClient();
client.start();
}
}