一:基于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的一些基础知识,如果有什么不懂可以随时私信