版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mayong1234567/article/details/82744753
前言
今日学到java种的通信知识,极大的引起了我的好奇,于是在学习的基础上,自己编写了 客户端和服务器 通信的代码,在局域网的情况下,客户端和局域网能够发送消息,同时在 俩台电脑的控制台可以显示对话信息.
服务器端代码:
import java.io.*;
import java.net.*;
import java.util.Scanner;
public class serverTest {
public static ServerSocket ss;
public static Socket s;
public static void main(String[] args)throws Exception{
//点对点通话 之发送字段
try{
//创建端口
ss = new ServerSocket(5555);
s= ss.accept();
System.out.println("连接成功!");
}catch(Exception e){
System.out.println("系统非正常退出");
}
// 创建并发进
Runner1 r = new Runner1();
Thread t = new Thread(r);
t.start();
//接受信息
InputStream is = null;
DataInputStream dis =null;
try{
String read= null;
dis = new DataInputStream(s.getInputStream());
while(true){
if ((read=dis.readUTF())!=null){
System.out.println("客户端: "+read);
}
}
}catch(Exception e){
}
}
}
/*
* 并发进程接受从客户端发来的程序
*/
class Runner1 implements Runnable{
public void run(){
//已经连接, socket 是s
// Socket socket = null;
// try{
// socket= new serverTest().ss.accept();
// }catch(Exception e){
// System.out.println("连接错误");
// }
//
Socket socket = new serverTest().s;
OutputStream os ;
try {
os=new serverTest().s.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
String line="连接成功";
line = new Scanner(System.in).nextLine();//这里输入一行
while(true){
dos.writeUTF(line);
dos.flush();
line = new Scanner(System.in).nextLine();
}
} catch (Exception e) {
// TODO: handle exception
System.out.println("发送错误");
}
}
}
客户端代码:
package client;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class clientTest {
//创建端口
public static Socket socket;
public static void main(String[] args)throws Exception{
//点对点通话 之发送字段
try{
//创建端口
socket = new Socket("192.168.1.159",5555);
}catch(Exception e){
System.out.println("系统非正常退出");
}
// 创建并发进
Runner1 r = new Runner1();
Thread t = new Thread(r);
t.start();
//接受信息
InputStream is = null;
DataInputStream dis =null;
try{
String readLine = null;
dis = new DataInputStream(is);
readLine=dis.readUTF();
while(true){
if ((readLine=dis.readUTF())!=null) {
System.out.println("服务器:"+readLine);
}
}
}catch(Exception e){
}
}
}
/*
* 并发进程接受从客户端发来的程序
*/
class Runner1 implements Runnable{
public void run(){
OutputStream os;
try {//发送 dataoutputstream
os= new clientTest().socket.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
String line;
line = new Scanner(System.in).nextLine();//这里输入一行
while(true){
dos.writeUTF(line);
dos.flush();
line = new Scanner(System.in).nextLine();
}
} catch (Exception e) {
// TODO: handle exception
System.out.println("发送错误");
}
}
}
代码解释:
1 服务器端创建端口,并接受连接.
2 创建并发进程,也就是我们 无论什么时候,既可以发送信息,也可以接收信息,细分成为俩个模块.
3 服务器端和客户端 共同有的代码: 接受信息块, 发送信息块.
* 服务器和客户端所用到的流要相同, 我这里用到的是DataInputStream 和InputStream 不然回出现发送接收不到的错误
* 深刻理解并发进程的概念, 我们可以 利用并发 写出的代码不分先后顺序.
* 进程不是循环,所以在进程中,添加一个死循环,这样我们就可以不断运行双进程,进而能够不间断的接受和发送信息.