一:基于tcp的網路通信`
在這里插入代碼片
/*服務器*/
package com.yxy;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class TestServer {
/*服務器端*/
public static void main(String[] args) throws IOException {
ServerSocket serverSocket=new ServerSocket(8888);
Socket socket = serverSocket.accept();
InputStream inputStream = socket.getInputStream();
DataInputStream dataInputStream=new DataInputStream(inputStream);
String s = dataInputStream.readUTF();
System.out.println("客戶端說:"+s);
OutputStream outputStream=socket.getOutputStream();
DataOutputStream dataOutputStream=new DataOutputStream(outputStream);
String s1="你好我是服務器";
dataOutputStream.writeUTF(s1);
dataOutputStream.close();
dataInputStream.close();
socket.close();
serverSocket.close();
}
}
/*客戶端*/
package com.yxy;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import java.io.*;
import java.net.Socket;
public class TestClient {
/*客戶端*/
public static void main(String[] args) throws IOException {
Socket socket=new Socket("192.168.0.103",8888);
OutputStream outputStream = socket.getOutputStream();
DataOutputStream dataOutputStream=new DataOutputStream(outputStream);
dataOutputStream.writeUTF("你好,我是客戶端");
InputStream inputStream = socket.getInputStream();
DataInputStream dataInputStream=new DataInputStream(inputStream);
String s = dataInputStream.readUTF();
System.out.println("服務器回傳訊息"+s);
dataOutputStream.close();
dataInputStream.close();
socket.close();
}
}
上面代碼存在一個很嚴重的問題,服務器只能監聽一次,那怎么可以解決了,在這了我提供一種方法,利用多執行緒,并且在上面增加一個簡單的登錄功能,這里沒有連接資料
/*User*/
package com.yxy;
import java.io.Serializable;
public class User implements Serializable {
private String username;
private String password;
public User() {
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
/*服務器執行緒*/
package com.yxy;
import jdk.internal.util.xml.impl.Input;
import java.io.*;
import java.net.Socket;
public class ServerThread extends Thread{
Socket socket=null;
InputStream inputStream=null;
ObjectInputStream objectInputStream=null;
DataOutputStream dataOutputStream=null;
OutputStream outputStream=null;
public ServerThread(Socket socket){
this.socket = socket;
}
@Override
public void run() {
try {
inputStream = socket.getInputStream();
User user = (User) objectInputStream.readObject();
boolean flag = false;
if(user.getUsername().equals("yzy")&&user.getPassword().equals("1130")){
flag = true;
}
outputStream=socket.getOutputStream();
dataOutputStream=new DataOutputStream(outputStream);
dataOutputStream.writeBoolean(flag);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}finally {
try {
if(dataOutputStream!=null){
dataOutputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if(outputStream!=null){
outputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if(objectInputStream!=null){
objectInputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if(inputStream!=null){
inputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/*服務器*/
package com.yxy;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class TestServer {
public static void main(String[] args) {
System.out.println("服務器啟動了");
//1.創建套接字: 指定服務器的埠號
ServerSocket serverSocket= null;
Socket socket = null;
int count=0;
try {
serverSocket=new ServerSocket(8888);
socket=serverSocket.accept();
new ServerThread(socket).start();
count++;
/*輸出客戶端資訊*/
System.out.println("當前是第"+count+"個用戶訪問我們的服務器,對應的用戶是:"+socket.getInetAddress());
} catch (IOException e) {
e.printStackTrace();
}
}
}
/*客戶端*/
package com.yxy;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
public class TestClient {
/*客戶端*/
public static void main(String[] args) throws IOException {
Scanner scanner=new Scanner(System.in);
System.out.println("請輸入username:");
String username = scanner.next();
System.out.println("請輸入password:");
String password = scanner.next();
Socket socket=new Socket("192.168.0.103",8888);
OutputStream outputStream = socket.getOutputStream();
User user =new User(username,password);
ObjectOutputStream objectOutputStream=new ObjectOutputStream(outputStream);
objectOutputStream.writeObject(user);
InputStream inputStream=socket.getInputStream();
DataInputStream dataInputStream=new DataInputStream(inputStream);
boolean b = dataInputStream.readBoolean();
if (b){
System.out.println("登陸成功");
}else{
System.out.println("登錄失敗");
}
dataInputStream.close();
inputStream.close();
objectOutputStream.close();
outputStream.close();
socket.close();
}
}
明天分享udp的一些基礎知識,如果有什么不懂可以隨時私信
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/385580.html
標籤:java
上一篇:java中抽象類和介面的異同點
