Socket,Java网络通信,网络编程
通信基本单位,A程序找B程序,A就叫客户端,B叫服务端
Socket通信基于TCP/IP,TCP(流式)和UDP(数据包)
简单的应用
Client:
public static void main(String[] args) {
try {
Socket socket = new Socket("127.0.0.1", 8888);
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os);
pw.write("你好");
pw.flush();
pw.close();
os.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
Server
public static void main(String[] args) {
try {
ServerSocket server =new ServerSocket(8888);
Socket socket = server.accept();
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String str = br.readLine();
System.out.println("这是服务端,收到了:"+str);
br.close();
is.close();
socket.close();
server.close();
} catch (IOException e) {
e.printStackTrace();
}
}
有反馈的情况:
Client:
public static void main(String[] args) {
try {
ServerSocket server =new ServerSocket(8765);
Socket socket = server.accept();
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String str = br.readLine();
String name = str.substring(2, 5);
String answer = "";
if (name.equals("13号")) {
answer="好的 我马上出来";
} else if(name.equals("孟老师")){
answer="老师好 我不太舒服 我不去了";
}else {
answer="滚!!!";
}
PrintWriter pw = new PrintWriter(os);
pw.write(answer);
pw.flush();
br.close();
is.close();
pw.close();
os.close();
socket.close();
server.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Server:
public static void main(String[] args) {
try {
Socket socket = new Socket("127.0.0.1", 8765);
OutputStream os = socket.getOutputStream();
InputStream is = socket.getInputStream();
PrintWriter pw = new PrintWriter(os);
pw.write("我是tye,出来玩吧");
pw.flush();
socket.shutdownOutput();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String str = br.readLine();
System.out.println("收到了zrr说:"+str);
pw.close();
os.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
传输对象
User类
public class User implements Serializable{
int account;
String uname;
Date openDate;
double amount;
public int getAccount() {
return account;
}
public void setAccount(int account) {
this.account = account;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public Date getOpenDate() {
return openDate;
}
public void setOpenDate(Date openDate) {
this.openDate = openDate;
}
public double getAmount() {
return amount;
}
public void setAmount(double amount) {
this.amount = amount;
}
}
Client:
import pojo.User;
public class Client3 {
public static void main(String[] args) throws Exception{
User user = new User();
user.setAccount(123123);
user.setUname("zhangsan");
user.setAmount(123.45);
user.setOpenDate(new Date());
Socket socket = new Socket("127.0.0.1", 7778);
OutputStream os = socket.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(os);
oos.writeObject(user);
oos.flush();
oos.close();
os.close();
socket.close();
}
}
Server:
import pojo.User;
public class Server3 {
public static void main(String[] args) throws Exception{
ServerSocket server = new ServerSocket(7778);
Socket socket = server.accept();
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
User u = (User)ois.readObject();
System.out.println(u.getAccount()+" "+u.getAmount()+" "+u.getUname()+" "+u.getOpenDate());
ois.close();
socket.close();
server.close();
}
}
单例模式
public class Singleton {
private static Singleton singleton;
private Singleton(){
}
public static Singleton gentlnstance(){
if (singleton == null){
singleton = new Singleton();
}
return singleton;
}
}