实现正常收发消息
Client
package TalkTCPSocket;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
/**
* 在线聊天室:客户端
* 目标:实现一个客户可以正常收发消息
* @author pmc
*
*/
public class ChatClient {
public static void main(String[] args) throws IOException{
System.out.println("-----Client-----");
//建立连接,使用Socket创建客户端+服务的地址和端口
Socket client=new Socket("192.168.10.100",8885);
//客户端发送消息
//读取键盘信息
BufferedReader re=new BufferedReader(new InputStreamReader(System.in));
String msg=re.readLine();
//发送信息
DataOutputStream out=new DataOutputStream(client.getOutputStream());
out.writeUTF(msg);
out.flush();
//接收服务器消息
DataInputStream in=new DataInputStream(client.getInputStream());
String str=in.readUTF();
System.out.println(str);
in.close();
out.close();
re.close();
client.close();
}
}
Server
package TalkTCPSocket;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 在线聊天室:客户端
* 目标:实现一个客户可以正常收发消息
* @author pmc
*
*/
public class ChatServer {
public static void main(String[] args) throws IOException {
System.out.println("-----Server-----");
//指定端口使用ServerSocket
ServerSocket server=new ServerSocket(8885);
//阻塞式等待连接accept
Socket client=server.accept();
System.out.println("已建立连接");
//服务端接收数据
//读取客户端信息
DataInputStream re=new DataInputStream(client.getInputStream());
String msg=re.readUTF();
System.out.println(msg);
//向客户端发送消息
DataOutputStream out=new DataOutputStream(client.getOutputStream());
String str="服务器返回信息";
out.writeUTF(str);
out.flush();
//关闭源
out.close();
re.close();
client.close();
// server.close();
}
}
实现收发多条消息
Client
package TalkTCPSocket;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
/**
* 在线聊天室:客户端
* 目标:实现一个客户可以正常收发多条消息
* @author pmc
*
*/
public class ChatClient2 {
public static void main(String[] args) throws IOException{
System.out.println("-----Client-----");
//建立连接,使用Socket创建客户端+服务的地址和端口
Socket client=new Socket("192.168.10.100",8885);
//客户端发送消息
//读取键盘信息
BufferedReader re=new BufferedReader(new InputStreamReader(System.in));
DataOutputStream out=new DataOutputStream(client.getOutputStream());
DataInputStream in=new DataInputStream(client.getInputStream());
boolean flag=true;
while(flag){
String msg=re.readLine();
//发送信息
out.writeUTF(msg);
out.flush();
//接收服务器消息
String str=in.readUTF();
System.out.println(str);
if(msg.equals("bye")){
// flag=false;
}
}
//关闭
in.close();
out.close();
re.close();
client.close();
}
}
Server
package TalkTCPSocket;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 在线聊天室:客户端
* 目标:实现一个客户可以正常收发多条消息
* @author pmc
*
*/
public class ChatServer2 {
public static void main(String[] args) throws IOException {
System.out.println("-----Server-----");
//指定端口使用ServerSocket
ServerSocket server=new ServerSocket(8885);
//阻塞式等待连接accept
Socket client=server.accept();
System.out.println("已建立连接");
//服务端接收数据
//读取客户端信息
DataInputStream re=new DataInputStream(client.getInputStream());
DataOutputStream out=new DataOutputStream(client.getOutputStream());
boolean flag=true;
while(flag){
String msg=re.readUTF();
System.out.println(msg);
//向客户端发送消息
String str="发送成功";
out.writeUTF(str);
out.flush();
if(msg.equals("bye")){
// flag=false;
}
}
//关闭源
out.close();
re.close();
client.close();
// server.close();
}
}
实现多个客户正常收发消息
Client
package TalkTCPSocket;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
/**
* 在线聊天室:客户端
* 目标:实现多个客户可以正常收发多条消息
* @author pmc
*
*/
public class ChatClient3 {
public static void main(String[] args) throws IOException{
System.out.println("-----Client-----");
//建立连接,使用Socket创建客户端+服务的地址和端口
Socket client=new Socket("192.168.10.100",8885);
//客户端发送消息
//读取键盘信息
BufferedReader re=new BufferedReader(new InputStreamReader(System.in));
DataOutputStream out=new DataOutputStream(client.getOutputStream());
DataInputStream in=new DataInputStream(client.getInputStream());
boolean flag=true;
while(flag){
String msg=re.readLine();
//发送信息
out.writeUTF(msg);
out.flush();
//接收服务器消息
String str=in.readUTF();
System.out.println(str);
if(msg.equals("bye")){
flag=false;
}
}
//关闭
in.close();
out.close();
re.close();
client.close();
}
}
Server
package TalkTCPSocket;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 在线聊天室:客户端
* 目标:实现多个客户可以正常收发多条消息
* 问题:其他客户必须等待之前的客户退出,才能继续排队
*
* @author pmc
*
*/
public class ChatServer3 {
public static void main(String[] args) throws IOException {
System.out.println("-----Server-----");
// 指定端口使用ServerSocket
ServerSocket server = new ServerSocket(8885);
// 阻塞式等待连接accept
while (true) {
Socket client = server.accept();
System.out.println("已建立连接");
// 服务端接收数据
// 读取客户端信息
DataInputStream re = new DataInputStream(client.getInputStream());
DataOutputStream out = new DataOutputStream(client.getOutputStream());
boolean flag = true;
while (flag) {
String msg = re.readUTF();
System.out.println(msg);
// 向客户端发送消息
String str = "发送成功";
out.writeUTF(str);
out.flush();
if (msg.equals("bye")) {
flag = false;
}
}
// 关闭源
out.close();
re.close();
client.close();
}
// server.close();
}
}
加入线程Thread实现多客户同时收发消息
Server
package TalkTCPSocket;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 在线聊天室:客户端
* 目标:使用多线程实现多个客户可以正常收发多条消息
* 问题:其他客户必须等待之前的客户退出,才能继续排队
*
* @author pmc
*
*/
public class TChatServer4 {
public static void main(String[] args) throws IOException {
System.out.println("-----Server-----");
// 指定端口使用ServerSocket
ServerSocket server = new ServerSocket(8885);
// 阻塞式等待连接accept
while (true) {
Socket client = server.accept();
System.out.println("已建立连接");
// 服务端接收数据
// 读取客户端信息
new Thread(() -> {
DataInputStream re=null;
DataOutputStream out=null;
try {
re = new DataInputStream(client.getInputStream());
out = new DataOutputStream(client.getOutputStream());
boolean flag = true;
while (flag) {
String msg = re.readUTF();
System.out.println(msg);
// 向客户端发送消息
String str = "发送成功";
out.writeUTF(str);
out.flush();
if (msg.equals("bye")) {
flag = false;
}
}
// 关闭源
out.close();
re.close();
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}).start();
}
// server.close();
}
}