Java socket模拟聊天程序



根据TCP/IP协议,通过socket实现网络聊天,分为服务器端和客户端,一下是参考程序。

服务器端程序:

package com.michael.contact;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
	public static void main(String args[]) throws IOException {
		String reces = null;
		int len;
		Socket socket = null;
		OutputStream outputstream = null;
		InputStream inputstream = null;
		byte[] rece = new byte[1000];
		try {
			ServerSocket serversocket = new ServerSocket(8888); // 服务器的套接字,端口为8888
			while (true) {
				socket = serversocket.accept();
				inputstream = socket.getInputStream();// 得到输入流
				outputstream = socket.getOutputStream();// 得到输出流
				len = inputstream.read(rece);// 接受客户端消息
				if (len != 0)
					reces = new String(rece, 0, len);
				System.out.println(reces);
				BufferedReader bufferreader = new BufferedReader(new InputStreamReader(System.in));
				outputstream.write(("服务器....." + bufferreader.readLine()).getBytes());// 返回给客户端的欢迎信息
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			inputstream.close();
			outputstream.close();
			socket.close();// 记住一定要关闭这些输入,输出流和套接字
		}

	}
}

客户端程序:

package com.michael.contact;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
public class Client {
    public static void main(String[] args) throws IOException {
        String ServerIpAddress = "127.0.0.1";// 对方的IP
        String words = "Hello";// 对方的话
        String temp = null;
        byte[] serverSay = new byte[1000];// 读取<1KB
        InputStreamReader read = null;
        int len = 0;
        Socket s = null;
        OutputStream outputstream = null;
        InputStream inputstream = null;
        // 取得你给他的IP
        System.out.println("请输入对方的IP(默认发给自己):");
        read = new InputStreamReader(System.in);
        try {
            temp = new BufferedReader(read).readLine();
            if (!temp.equals(""))
                ServerIpAddress = temp;
        } catch (IOException e1) {
        }
        // 取得你各他的Message
        System.out.println("请输入想对他(她)说的话----输入QUIT 退出!!:");
        read = new InputStreamReader(System.in);
        while (true) {
            try {
                temp = "Hello";
                temp = new BufferedReader(read).readLine();
                words = temp;
                if (words.equals("quit"))
                    break;
                temp = "客户端....." + words;
                // 发起通信
                s = new Socket(InetAddress.getByName(ServerIpAddress), 8888);// 套接字的IP地址和端口号
                outputstream = s.getOutputStream();
                inputstream = s.getInputStream();
                outputstream.write(temp.getBytes("gbk"));// 向服务器发送消息
                len = inputstream.read(serverSay);// 接受服务器消息
                System.out.println( new String(serverSay, 0, len));// 客户端控制台显示服务器返回的信息
            } catch (Exception e) {
            } finally {
                inputstream.close();
                outputstream.close();
                s.close();// 记住一定要关闭这些输入,输出流和套接字
            }
        }// end while
    }
}  
时间: 2024-08-29 01:42:13

Java socket模拟聊天程序的相关文章

java Socket多线程聊天程序(适合初学者)

一个非常简单的java聊天程序,有客户端和服务器端,目前只有群聊功能,其他的所有功能都可以在这个基础上添加,现在我分享出来主要是为了保持一个最简单的java聊天程序便于初学者学习,界面也非常的简洁,只有两个文件,主要是用了socket,java多线程,知识点不是很多,很适合初学者 下面是服务器端代码 package tk.socket; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.Act

字节码学院之Java socket 控制台聊天室

学了个把月基础,终于写出了一个双工通信的控制台版本的聊天室了,废话不说啦,直接上代码:服务端代码 package com.zijiemaedu.socketdemo; import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; /** * @author: Mr-zhang * @create: 2019-05-30 09:48 * @emall: [email

java socket 模拟im 即时通讯

自己想了一下怎么实现,就写了,没有深究是否合理.更多处理没有写下去,例如收件人不在线,应该保存在数据库,等下一次连接的时候刷新map,再把数据发送过去,图片发送也没有做,也没有用json格式 socket很奇怪,我用客户端连接上了服务器,没有发送消息的情况下,断开电脑网络,是不会出现问题,然后在把电脑网络连接上,通讯依然正常,正常断开也不出问题,但是用idea直接按stop键,那么服务端就会出问题了,读取事件会一直为true,造成死循环,消耗CPU,所以必须要判断一下客户端连接是否断开了 只需要

java socket模拟http请求

我们模拟SSLSocket连接,请求博客园首页,并打印响应消息.代码引用来自<Java网络编程精解>作者:孙卫琴 写这篇博客为了说明模拟过程中出现的一些问题,模拟时请先在浏览器访问目标路径,F12查看网络,查看原始的网络请求头. 注意: 1.HTTP请求报文包含请求行.请求头部.空行.请求包体4个部分组成. 2.模拟请求头部时Accept-Encoding不要使用压缩,否则响应结果会出现乱码 3.请求头部结束使用回车换行符结束 代码如下: package com.beluga.hello.ht

java socket编程--聊天小案例

很久以前写过socket聊天室,都快忘完了,心血来潮又重新写一遍. 服务器端: package com.fancy; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.n

Java Socket 多线程聊天室

本来这次作业我是想搞个图形界面的,然而现实情况是我把题意理解错了,于是乎失去了最初的兴致,还是把程序变成了功能正确但是“UI”不友好的console了,但是不管怎么样,前期的图形界面的开发还是很有收获的,毕竟讲真,想要把Java搞得有形有色的也是很不容易的,借助可视化的插件windowsBuilder,这个过程还是既exciting 又tiring的. 好吧 ,然而图形界面已经成为了历史,现在来说说这个功能正确的console 吧 我也是刚知道的Eclipse里面是可以跑好多个程序的,只要你的一

Socket网络聊天程序

IDE:CodeBlocks (如果在CB下进行Sokcet编程,要添加一个文件)详情请看这个:https://www.cnblogs.com/Xbert/p/5466963.html 然后这个程序是要同时开启客户端和服务端两个,调试很麻烦,建议双开两个codeblocks,链接:https://blog.csdn.net/weixin_41505011/article/details/80575522 客户端代码: 这里开启了一个新线程来接受用户端传来的消息,主线程则可以输出消息 #inclu

Java socket模拟HTTP协议客户端之POST请求

相比于GET请求,POST报文多了如下几个要素: 1,Content-Length,这个是上送报文的长度,以字节为单位 2,Content-Type,这主要是涉及到报文的格式和字符集. 3,就是主报文 主类SimpleHttpPost: package com.zws.http; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetSock

Java TCP Swing聊天程序

http://www.oschina.net/code/snippet_935786_52805 业余写着玩的,好多功能没实现,有兴趣的可以拿去玩玩.图片大了还上不了,额.下载地址 http://download.csdn.net/download/onlyxiahui/9347191 账号 10001~10100等 密码都是123 客户端的入口:com.oim.app.AppStartup 服务端的入口:com.oim.ui.MainFrame 标签: <无> 代码片段(8)[全屏查看所有代