java socket实现局域网聊天

网友投稿 341 2022-07-29


使用socket实现局域网聊天,写这个主要是为了深入理解socket与信息流在网络中的传送过程加深理解。

代码很简单分为两个类,一个服务器类,一个客户端,运行时分别启动两个线程一个负责接受另一个负责发送。

整体流程是 两台机器分别启动程序,一个选择主动连接 另一个选择被动接受,即可实现类似qq的聊天效果两个人可以同时发送消息。

注意的事,不要在同一台电脑上同时启动两个,这样会服务端和客户端的ip都是相同很有可能造成自己发送的消息自己接受到了,可以两台电脑或者虚拟机里面进行。

服务端:

package com.server;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.net.ServerSocket;

import java.net.Socket;

import com.client.RunClient;

public class RunServer {

public static Socket socket=null;

/**

* 建立服务器被动连接

* @throws IOException

*/

public void startServer() throws IOException {

//服务器接收数据

ServerSocket serverSocekt=new ServerSocket(8888);

System.out.println("服务器启动,等待连接...");

//创建客户端线程

RunClient rc=new RunClient();

Thread rct=new Thread(rc);

rct.start();

//阻塞线程 监听端口建立socket会话

RunServer.socket=serverSocekt.accept();

//获取输入留

InputStream is=socket.getInputStream();

//将字节输入流转换成字符输入流

InputStreamReader isr=new InputStreamReader(is);

//将字符输入流装入带缓冲的输入流中

BufferedReader br=new BufferedReader(isr);

String str=null;

while((str=br.readLine())!=null){

System.out.print("输出信息:"+str);

}

socket.shutdownInput();

serverSocekt.close();

}

}

客户端:

package com.client;

import java.io.BufferedWriter;

import java.io.OutputStream;

import java.io.OutputStreamWriter;

import java.net.Socket;

import java.net.UnknownHostException;

import java.util.Scanner;

import com.server.RunServer;

public class RunClient implements Runnable {

@Override

public void run() {

// TODO Auto-generated method stub

Scanner input = new Scanner(System.in);

System.out.println("1、主动连接\n2、被动等待");

String sign=input.next();

switch (sign) {

case "1":

try {

System.out.println("输入服务器IP:");

startClient(input.next());

} catch (Exception e) {

e.printStackTrace();

}

break;

case "2":

try {

startClient();

} catch (Exception e) {

e.printStackTrace();

}

break;

default:

break;

}

}

/**

* 由已经建立的socket 进行连接反向连

* @throws Exception

* @throws UnknownHostException

*/

public void startClient() throws Exception{

while(true){

try {

if(RunServer.socket!=null){

break;

}

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

// 与服务器建立连接

Socket socket=new Socket(RunServer.socket.getInetAddress().getHostAddress(), 8888);

System.out.println("连接建立成功...");

//向服务器写入流

OutputStream os=socket.getOutputStream();

BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os));

Scanner input=new Scanner(System.in);

while(true){

System.out.println("输入信息:");

bw.write(input.next());

bw.newLine();

bw.flush();

}waPFaB

}

/**

* 通过IP与服务器建立连接

* @throws Exception

* @throws UnknownHostException

*/

public void startClient(String ip) throws Exception{

// 与服务器建立连接

Socket socket=new Socket(ip, 8888);

System.out.println("连接建立成功...");

//向服务器写入流

OutputStream os=socket.getOutputStream();

BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os));

Scanner input=new Scanner(System.in);

http://

while(true){

bw.write(input.next());

bw.newLine();

bw.flush();

}

}

}

main:

package com.start;

import com.server.RunServer;

public class Go {

public static void main(String[] args) throws Exception {

// TODO Auto-generated method stub

RunServer rs=new RunServer();

rs.startServer();

}

}

效果:我是用虚拟机加本机


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java用局域网实现聊天室功能
下一篇:Java实现局域网IP地址扫描(跨网段ip地址扫描)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~