java 聊天室之 傳送圖片文字等功能的實現
前幾日寫的一篇簡陋之極的java聊天室被各位前輩說是,一塌糊塗,烏煙瘴氣,只是簡單的實現了需要的功能,並未做到人性化。在下痛定思痛,心想還是先學會顯示功能再做美化介面,美化程式碼的打算!
在奮鬥了一天之後終於完成了集圖片,文字,直線等功能為一體的群聊天室。先分析程式碼如下:
關於介面什麼的我就不說了,筆者在前面的部落格中有提過!直接附上各種功能的實現方法。
首先我們要傳送資訊,必須要讓被傳送的物件知道我們傳送的是什麼東西,所以在傳送資訊之前,我們首先要確定一個協議,比如說當客戶端接收到的第一個int 值為1的時候,它接下來就要再接收4個int值,據此來畫一條直線,而我伺服器畫一條直線的時候可以獲得該直線的四個int值,但是在利用IO流傳送這四個int值的時候,我首先要先發送一個1,也就是說我每次在要傳送一天直線之前就要先發送一個1,當然在客戶端讀取的時候,我們第一次讀取到的是1,就接收四個int。當讀完四個int之後並畫完一條直線之後我們還要讀取資料,如果還是1的話,我們繼續上面的操作,如果讀取的是2,按照規定的協議,我們就呼叫相應的方法即可!!!!
現附上伺服器傳送直線的程式碼如下,該程式碼是寫在介面類裡面的內部類:
Java程式碼- //滑鼠進入事件
- MouseListener ms=(new MouseListener(){
- public void mousePressed(MouseEvent e){
- x1=e.getX();
- y1=e.getY();
- }
- public void mouseReleased(MouseEvent e){
- int x2=e.getX();
- int y2=e.getY();
- g.drawLine(x1,y1,x2,y2);
- ChatTools.castbyte(1);
- ChatTools.castbyte(x1);
- ChatTools.castbyte(y1);
- ChatTools.castbyte(x2);
- ChatTools.castbyte(y2);
- }
- public void mouseClicked(MouseEvent e){}
- public void mouseEntered(MouseEvent e){}
- public void mouseExited (MouseEvent e){}
- });
- jp.addMouseListener(ms);
當然相應的我們也要在客戶端定義一個讀取資料的方法,首先我們要判斷髮送過來的是什麼東西,我設定的協議是,如果首先讀到的是1,接下來就畫直線,如果讀到的是2,接下來就接收一張圖片,如果讀到的是4,接下來讀到的就是一段文字。該方法是放在客戶端的執行緒中的,並且線上程的Run方法中呼叫該方法。
並且在每執行完一次操作之後,便再次讀取一個int值,再次判斷該int值為多少,以便得到下一個執行的指令。
Java程式碼- public void processServer(Socket client){
- try{
- ins=client.getInputStream();
- OutputStream out=client.getOutputStream();
- dis = new DataInputStream(ins);
- dout=new DataOutputStream(out);
- int t=dis.readInt();
- while(true){
- //如果讀到的是1,呼叫讀取線段的方法
- if(t==1){
- readline();
- }
- //讀到的是2則呼叫接受畫面的方法
- if(t==2){
- readPic();
- }
- //如果讀到的是4,則呼叫接受文字的方法
- if(t==4){
- readMsg();
- }
- t=dis.readInt();
- }
- }catch(Exception ef){
- ef.printStackTrace();
- }
- }
當判斷int值為1的時候,我們就呼叫畫直線的方法,該方法如下
Java程式碼- //定義一個讀取線段的方法
- public void readline() {
- try {
- int x1=dis.readInt();
- int y1=dis.readInt();
- int x2=dis.readInt();
- int y2=dis.readInt();
- g.drawLine(x1,y1,x2,y2);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
當然,我們需要在客戶端和伺服器都要定義相同功能的傳送和接收方法。
現在我們再寫一個文字的接收方法,首先我們會在文字輸入框中輸入字元,並獲得該文字內容,每當按下發送這個按鈕時便呼叫訊息的傳送方法,將該訊息傳送出去!
Java程式碼- ActionListener al=(new ActionListener(){
- public void actionPerformed(ActionEvent e){
- String s=e.getActionCommand();
- if(s.equals("建立")){
- Chatserver cs=new Chatserver(9090,jta,dout,g);
- cs.start();
- }
- //將伺服器訊息發給每個人
- if(s.equals("傳送")){
- String msg=jte1.getText();
- ChatTools.castMsg(msg);
- jta.append("伺服器說:"+msg+"\r\n");
- jte1.setText("");
- }
其中ChatTools.castMsg();是一個訊息群發的方法,該方法在佇列類裡面定義的,程式碼如下
Java程式碼- //將一個訊息傳送給所有人
- ublic static void castMsg(String str){
- ChatTools.castbyte(4);
- for(int i=0;i<list.size();i++){
- ServerThread st=list.get(i);
- st.sendMs(i+"說:"+str);
- }
而sendMsg();則是一個訊息的傳送方法。該方法如下
Java程式碼- //將傳送訊息的程式碼包裝到一個方法中
- public void sendMs(String msg){
- try{
- msg+="\r\n";
- dout.write(msg.getBytes());
- //強制輸出
- dout.flush();
- }catch(Exception ef){}
- }
實現字串傳輸的重中之重便是讀取的方法,我們會首先獲得一個為4的int值,然後我們就要呼叫字串的讀取方法
Java程式碼- public void readMsg(){
- try{
- brd=new BufferedReader(new InputStreamReader(ins));
- String input=brd.readLine();
- jta.append(input +"\r\n");
- }catch(Exception ef){}
- }
我使用的BufferedReader緩衝流,實現整行讀取的方式,該方式不會產生亂碼,所以還是不錯的。
而我今天要重點講的便是圖片從檔案中讀取和傳送的方法。
首先我們要獲得圖片,再者我們要獲取圖片的寬度和高度,在迴圈遍歷每個畫素點,獲取該點的顏色值,接著我們便在畫布中呼叫畫線的方法,依次畫出每個畫素點,並相應的給每個點附上相應的顏色即可。這樣一張圖片就在自己的畫布上顯示出來了!程式碼如下
Java程式碼- ActionListener al=(new ActionListener(){
- public void actionPerformed(ActionEvent e){
- String s=e.getActionCommand();
- if(s.equals("建立")){
- Chatserver cs=new Chatserver(9090,jta,dout,g);
- cs.start();
- }
- //將伺服器訊息發給每個人
- if(s.equals("傳送")){
- String msg=jte1.getText();
- ChatTools.castMsg(msg);
- jta.append("伺服器說:"+msg+"\r\n");
- jte1.setText("");
- }
- if(s.equals("圖片")){
- try {
- BufferedImage image = ImageIO.read(new File("2.jpg"));
- int m=image.getHeight();
- int n=image.getWidth();
- for(int i=0;i<n;i++){
- for(int j=0;j<m;j++){
- rgb=image.getRGB(i,j);
- System.out.println(i);
- System.out.println(j);
- Color color=new Color(rgb);
- g.setColor(color);
- g.drawLine(i,j,i,j);
- ChatTools.castbyte(2);
- ChatTools.castbyte(rgb);
- ChatTools.castbyte(i);
- ChatTools.castbyte(j);
- }
- }
- } catch (IOException e1) {
- e1.printStackTrace();
- }
能畫出圖片,當然我們就能傳送圖片,我們就能相應的讀取圖片,在傳送圖片資訊的時候,我們每取出一個點,就能獲得該店的顏色,我們就把該點橫座標和縱座標以及顏色值傳送過去。在接收端,我們會首先讀到一個為2的int值,然後程式會呼叫圖片的讀取方法。方法如下
Java程式碼相關推薦
java 聊天室之 傳送圖片文字等功能的實現
前幾日寫的一篇簡陋之極的java聊天室被各位前輩說是,一塌糊塗,烏煙瘴氣,只是簡單的實現了需要的功能,並未做到人性化。在下痛定思痛,心想還是先學會顯示功能再做美化介面,美化程式碼的打算! 在奮鬥了一天之後終於完成了集圖片,文字,直線等功能為一體的群聊天室。先分析
JAVA工具類之多圖片合成與圖片新增文字
應公司需要,需要給每個客戶生成個性的微信圖片二維碼,涉及到背景圖片、微信帶參二維碼和微信頭像的合成,並將微信你暱稱新增在上面。 效果如下: 圖片實現程式碼,需依賴JAVA圖片處理工具類(放大、縮小) PictureMerge.ja
JAVA聊天室-極簡版
實現客戶端和服務端的連線並且可以群聊*##“` 客戶端 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStrea
【我要程式設計】Java技術手冊之根據圖片連結把圖片轉化為io流,並輸出到頁面上的方法
適用場景:A程式只能內網訪問,B程式可以外網訪問,只有B程式可以訪問A程式,使用者需要通過B程式訪問A程式的圖片資源。這是可以使用該方法。 @RequestMapping("/getImageByPath") public void getImageByTomcat(St
#java 聊天室(二)—— 給聊天室增加選單和私聊功能
#java 聊天室(二)—— 給聊天室增加選單和私聊功能 在上一篇部落格裡,我們實現了用java寫了一個telnet聊天伺服器,實現了群聊功能。今天我們就來給這個聊天室新增選單,並且實現私聊功能。 1.實現目標 在使用者登入後顯示選單: 當用
android下的XMPP對應smack-4.2.1,實現登入,註冊,發單聊,加聊天室,發群聊等簡單功能
1.API地址:點選開啟連結 2.openfire,spark下載:點選開啟連結 3.效果圖 4.引用的JAR: compile files('libs/fscontext.jar') compile files('libs/providerutil
Java設計模式之從[使命召喚等遊戲的任務提示]分析職責鏈(Chain Of Responsibility)模式
我們在使命召喚、暗黑破壞神等遊戲時,總會接到各種各樣的遊戲任務,如到某某地方解救某人,或者消滅某某地方的敵人等。當玩家進入到某一個地圖(以下稱之為遊戲場景)時,我們就可以檢視它的任務提示。在這個機制下,我們認為,所有的遊戲場景都繼承於一個類(如HelpHandler),
Java聊天室
1.首先是伺服器的介面實現,如下: 2.如何實現呢?主要使用swing和awt,首先整個是一個Frame容器,然後設定它的佈局為BoderLayout,最上邊的是一個Panel,設定它的佈局為GridLayout,中間使用了JSplit
Java聊天室——從0開始打造基於netty的100w級高併發應用
Netty聊天室 瘋狂創客圈 Java 分散式聊天室【 億級流量】實戰系列之18 【 部落格園 總入口】 QQ群:104131248 】 文章目錄 Netty聊天室 原始碼工程 寫在前面 【百萬級流量 聊天室實戰】:
java上傳並壓縮圖片(等比例壓縮或者原尺寸壓縮)
先看效果: 原圖:1.33M 處理後:27.4kb 關鍵程式碼; package codeGenerate.util; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Imag
java聊天室設計及實現
這是大二剛學java時做的東西,執行伺服器,註冊兩個客戶端,登入後客戶端之間可以進行文字聊天,有群發功能。 如何實現: 呼叫ServerSocket來建立繫結在指定埠上的伺服器,然後呼叫accept方法阻塞,等待客戶端的連線,連上後返回socket連線物件。 然後將
練手小專案一:JAVA聊天室原始碼
客戶端: import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; imp
基於百度API,實現圖片文字識別功能(Java版)
1、登入百度AI開放平臺 (1)在頂部導航欄中,找到控制檯選項,並選擇文字識別功能,進入管理中心頁面 (2)在管理中心頁面中,找到建立應用按鈕並點選 (3)填寫應用名名稱和應用描述,選擇相應的應用型別,勾選自己需要的介面服
基於Linux c 用socket和執行緒 實現的簡易聊天室之伺服器
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <sys/types.h> #include <sys/socket.h> #
11.JAVA-Object類之finalize(),clone(),toString()等方法覆寫
href this 都是 .html rac 回收 信息 ktr font 1.Object介紹 Object類是一個特殊的類,是所有類(包括數組,接口 )的父類,如果一個類沒有用extends明確指出繼承於某個類,那麽它默認繼承Object類,所以可以通過向上轉型的方法
重構 JAVA 聊天室 —— CS 模式的簡單架構實現
前言 自從開始弄起資料探勘之後,已經很久沒寫過技術類的部落格了,最近學校 JAVA 課設要求實現一個聊天室,想想去年自己已經寫了一個了,但是有些要求到的功能我也沒實現,但看著原有的程式碼想了想加功能好像有那麼點點難,於是就想著重構,也正好之前有看到別人寫的CS架構的程式碼,感覺擴充套件性還不錯,就試著寫了寫
常用的Emgu CV程式碼(主要有圖片格式轉換,圖片裁剪,圖片翻轉,圖片旋轉和圖片平移等功能)
轉載自部落格 using System; using System.Drawing; using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure; namespace ZNLGIS { public class Im
java設計模式之動態代理的概述和實現
概述 1.代理:本來應該自己做的事情,請了別人來做,被請的人就是代理物件。 舉例:春節回家買票讓人代買 2.在Java中java.lang.reflect包
自定義控制元件之實現線上簽名,儲存,清除等功能實現
不多說,直接上程式碼看效果: package com.loaderman.signaturedemo; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color;
Java資料結構之——棧:用連結串列實現
class Node<E>{ E data; Node<E> next = null; public Node(E data){ this.data = data; } } public class ListStack<