Socket -> 套接字
CS架构 C = client = 客户端 S = Server = 服务器
BS架构 B = Browser = 浏览器 S = Server = 服务器
import java.net.*;
import java.io.*;
import javax.swing.*;
public class Client01{
public static void main(String[] args)throws Exception{
while(true){
String str = JOptionPane.showInputDialog(null,"请输入内容");
if("88".equals(str)){
break;
}
Socket skt = new Socket("192.168.31.236",12666);
OutputStream os = skt.getOutputStream();
PrintWriter pw = new PrintWriter(os,true);
pw.println(str);
pw.close();
skt.close();
}
}
}
import java.net.*;
import java.io.*;
public class Client02{
public static void main(String[] args)throws Exception{
Socket skt = new Socket("192.168.31.236",12345);
InputStream is = skt.getInputStream();
FileOutputStream fos = new FileOutputStream("jay.png");
byte[] data = new byte[65536];
int len;
while((len = is.read(data))!=-1){
fos.write(data,0,len);
}
fos.close();
is.close();
skt.close();
}
}
import java.net.*;
import java.io.*;
import javax.swing.*;
public class Client03{
public static void main(String[] args)throws Exception{
String name = JOptionPane.showInputDialog(null,"请输入姓名 : ");
Socket skt = new Socket("192.168.31.236",17666);
OutputStream os = skt.getOutputStream();
PrintWriter pw = new PrintWriter(os,true);
pw.println(name);
InputStream is = skt.getInputStream();
InputStreamReader r = new InputStreamReader(is);
BufferedReader br = new BufferedReader(r);
String result = br.readLine();
JOptionPane.showMessageDialog(null,result);
br.close();
pw.close();
skt.close();
}
}
import java.net.*;
import java.io.*;
import javax.swing.*;
public class Client04{
public static void main(String[] args)throws Exception{
String username = JOptionPane.showInputDialog(null,"请输入用户名 :");
String password = JOptionPane.showInputDialog(null,"请输入密码 :");
if(username == null || password ==null || username.trim().length() == 0 || password.trim().length() == 0){
JOptionPane.showMessageDialog(null,"手呢?!");
return;
}
Socket skt = new Socket("192.168.31.236",12666);
PrintWriter pw = new PrintWriter(skt.getOutputStream(),true);
pw.println(username);
pw.println(password);
DataInputStream dis = new DataInputStream(skt.getInputStream());
int result = dis.readInt();
dis.close();
pw.close();
skt.close();
if(result == 0){
JOptionPane.showMessageDialog(null,"登陆成功 欢迎回来");
}else if(result == 1){
JOptionPane.showMessageDialog(null,"不是老周不让登录");
}else if(result == 2){
JOptionPane.showMessageDialog(null,"不了解老周不让登录");
}
}
}
import java.net.*;
import java.io.*;
import java.util.*;
public class Server01{
public static void main(String[] args)throws Exception{
ServerSocket server = new ServerSocket(12666);//避让前1024
boolean isRunning = true;
while(isRunning){
Socket skt = server.accept();
ServerThread st = new ServerThread(skt);
st.start();
}
server.close();
}
}
class X{
static Set<String> ipSet = new HashSet<>();
static List<String> badWords = new ArrayList<>();
static{
badWords.add("老大");
badWords.add("娘");
}
}
class ServerThread extends Thread{
Socket skt;
public ServerThread(Socket skt){
this.skt = skt;
}
@Override
public void run(){
try{
InputStream is = skt.getInputStream();
InputStreamReader r = new InputStreamReader(is);
BufferedReader br = new BufferedReader(r);
String str = br.readLine();
String ip = skt.getInetAddress().toString();
X.ipSet.add(ip);
boolean isShow = true;
for(String word : X.badWords){
if(str.contains(word)){
isShow = false;
}
}
if(isShow){
System.out.println(ip + " : " + str + " " + X.ipSet.size()+"/55");
}else{
System.out.println(ip + ": 它承认它没做好事");
}
br.close();
skt.close();
}catch(Exception e ){
e.printStackTrace();
}
}
}
import java.io.*;
import java.net.*;
import java.util.concurrent.*;
public class Server02{
public static void main(String[] args)throws Exception{
ExecutorService es = Executors.newCachedThreadPool();
ServerSocket server = new ServerSocket(12345);
boolean isRunning = true;
while(isRunning){
Socket skt = server.accept();
ServerThread st = new ServerThread(skt);
es.submit(st);
}
server.close();
es.shutdown();
}
}
class ServerThread implements Runnable{
Socket skt;
public ServerThread(Socket skt){
this.skt = skt;
}
@Override
public void run(){
try{
FileInputStream fis = new FileInputStream("jay.png");
OutputStream os = skt.getOutputStream();
byte[] data = new byte[65536];
int len;
while((len = fis.read(data))!=-1){
os.write(data,0,len);
}
os.close();
fis.close();
skt.close();
System.out.println(skt.getInetAddress()+"已经下载完成");
}catch(Exception e){
e.printStackTrace();
System.out.println(skt.getInetAddress() + "是我就是我");
}
}
}
import java.net.*;
import java.io.*;
import java.util.concurrent.*;
public class Server03{
public static void main(String[] args)throws Exception{
ExecutorService es = Executors.newFixedThreadPool(5);
ServerSocket server = new ServerSocket(17666);
boolean isRunning = true;
while(isRunning){
Socket skt = server.accept();
ServerThread st = new ServerThread(skt);
es.submit(st);
}
server.close();
es.shutdown();
}
}
class ServerThread implements Callable<String>{
Socket skt;
public ServerThread(Socket skt){
this.skt = skt;
}
@Override
public String call()throws Exception{
//接收
InputStream is = skt.getInputStream();
InputStreamReader r = new InputStreamReader(is);
BufferedReader br = new BufferedReader(r);
String name = br.readLine();
//处理
String result = X.get(name);
//发
OutputStream os = skt.getOutputStream();
PrintWriter pw = new PrintWriter(os,true);
pw.println(result);
pw.close();
br.close();
skt.close();
System.out.println(skt.getInetAddress() + " -> " + name +"->" + result);
return null;
}
}
class X{
public static String get(String name){
if(name.contains("蔡")||name.contains("徐")||name.contains("坤")){
return "小黑子露出鸡脚来了吧";
}
}
}
import java.net.*;
import java.io.*;
import java.util.concurrent.*;
public class TestServer04{
public static void main(String[] args)throws Exception{
ExecutorService es = Executors.newCachedThreadPool();
ServerSocket server = new ServerSocket(12666);
boolean isRunning = true;
while(isRunning){
Socket skt = server.accept();
ServerThread st = new ServerThread(skt);
es.submit(st);
}
server.close();
es.shutdown();
}
}
class ServerThread extends Thread{
Socket skt;
public ServerThread(Socket skt){
this.skt = skt;
}
@Override
public void run(){
try{
InputStream is = skt.getInputStream();
InputStreamReader r = new InputStreamReader(is);
BufferedReader br = new BufferedReader(r);
String username = br.readLine();
String password = br.readLine();
int result = -1;
if("JayZhou".equals(username)){
if("942942".equals(password)){
result = 0;//登录成功
}else{
result = 2;//不了解老周不让登录(密码错误)
}
}else{
result = 1;//不是老周不让登录(用户名错误)
}
OutputStream os = skt.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
dos.writeInt(result);
dos.close();
br.close();
skt.close();
System.out.println(skt.getInetAddress() + " -> "+ username + " : " + password +" -> " + result);
}catch(Exception e){
e.printStackTrace();
}
}
}
GUI Graphical User Interface
java.awt.*; 重量级组件包 Button
javax.swing.*; 轻量级组件包 JButton
常见的6个步骤:
1.选择容器和组件
组件:界面上能够看到的每一个物体都被称之为一个 组件 Component
容器:一旦一个组件当中能够添加其他的组件 Container
常用的容器:JFrame JPanel
常用的组件:
JButton JTextField JTextArea JPasswordField JLable JMenuBar JMenu JMenuItem
2.初始化容器和组件
new new new (必然要了解每个类型的构造方法)
3.选择布局管理器
阵型 队列
a> BorderLayout -> 边框布局 它是JFrame的默认布局
它将容器的可视范围分割为东西南北中五个区域 每个区域只允许添加一个组件 不尊重 组件原始大小 直接拉伸占满整块区域 如果东西南北四个区域当中有未使用的区域 将直接被中央及其小弟占领
b> FlowLayout ->流水布局 它是JPanel的默认布局
按照从左到右顺序依次摆放添加的组件 尊重组件的原始大小 不会拉伸也不会缩放 如果一行摆放不开 则自动换行并且依然居中对齐
c> GridLayout ->网格布局 他不是任何容器的默认布局
将容器可视范围分割为指定的行数列数的网格 每个单元格只允许添加一个组件 不尊重组件原始大小 直接占满整个单元格 添加按照从左到右自上而下的顺序依次添加
4.将组件添加进容器
容器.add(组件);
5.添加事件监听器
6.设置窗体属性
a.设置窗体大小
b.设置窗体是否可见
c.设置窗体默认关闭操作