电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

java實現(xiàn)即時通信的完整步驟分享

瀏覽:5日期:2022-08-25 10:40:32

前言

移動社交是我們?nèi)粘I钪泻艹R姷能浖罱谧黾磿r通信,我用的是環(huán)信,和大家分享一下~~環(huán)信的API都是基于JSON的,所以在構(gòu)造HTTP請求的時候,要指定請求頭

java實現(xiàn)即時通信的完整步驟分享java實現(xiàn)即時通信的完整步驟分享

注意==》環(huán)信API必須攜帶token才可以訪問。

創(chuàng)建一個認(rèn)證類

public class Authentic { private static Token token = new Token(); private TalkHttpService service; public Authentic(TalkHttpService service) { this.service = service; } public Authentic(TalkHttpService service, Token token) { this.service = service; if (token != null) { Authentic.token = token; } } public Token getToken() { this.flush(); return token; } public void task() { this.flush(); } /** * @describe 申請認(rèn)證 POST PUT 這兩種請求攜帶參數(shù) * @author 何章懷曉 hezhanghuaixiao * @date 2020/9/8 17:02 * @other */ public void applyAuthentication(HttpEntityEnclosingRequestBase request) { this.flush(); request.addHeader('Authorization', 'Bearer ' + token.toString()); } /** * @describe 申請認(rèn)證 GET DELETE 這兩種請求不攜帶參數(shù) * @author 何章懷曉 hezhanghuaixiao * @date 2020/9/8 17:02 * @other */ public void applyAuthentication(HttpRequestBase request) { this.flush(); request.addHeader('Authorization', 'Bearer ' + token.toString()); } private void flush() { synchronized (Authentic.class) { try { //如果超時 if (token.isExpire()) { //判斷APPID和秘鑰信息 if (_Global.APP_CLIENT_ID != null && _Global.APP_CLIENT_SECRET != null) { Map<String, Object> param = new HashMap<String, Object>(); param.put('grant_type', 'client_credentials'); param.put('client_id', _Global.APP_CLIENT_ID); param.put('client_secret', _Global.APP_CLIENT_SECRET); //請求獲取token TalkNode res = service .request(_Global.URR_TOKEN, _Global.HTTP_METHOD_POST, param, null, null); //成功獲取token if (res != null && res.getAccess_token() != null && res.getExpires_in() != null && res.getExpires_in() > 0) { //賦值 token = new Token(res.getAccess_token(), res.getExpires_in() * 1000 + System.currentTimeMillis()); } } } } catch (Exception e) { e.printStackTrace(); } } } public static class Token { private String token; private Long expire; public Token() { } public Token(String token, long expire) { this.token = token; this.expire = expire; } public String getToken() { return token; } public void setToken(String token) { this.token = token; } public Long getExpire() { return expire; } public void setExpire(Long expire) { this.expire = expire; } public boolean isExpire() { return expire == null || System.currentTimeMillis() > expire; } @Override public String toString() { return token; } }}

創(chuàng)建請求接口

public interface TalkHttpService {/** @describe @param* @param url 請求地址 * @param method請求方法 * @param param參數(shù) * @param auth加密認(rèn)證 * @param field字段轉(zhuǎn)換 @return com.hedashi.protal.model.TalkNode @author 何章懷曉 hezhanghuaixiao @date 2020/9/8 17:21 @other */ TalkNode request(String url, int method, Object param, Authentic auth, String[][] field) throws Exception;/** @describe @param* @param url 請求地址 * @param file文件名稱 * @param auth加密認(rèn)證 * @param equal字段轉(zhuǎn)換 @return com.hedashi.protal.model.TalkNode @author 何章懷曉 hezhanghuaixiao @date 2020/9/8 17:21 @other */ TalkNode upload(String url, File file, Authentic auth, String[][] equal) throws Exception;/** @describe @param* @param url 請求地址 * @param file文件名稱 * @param auth加密認(rèn)證 * @param header請求頭 @return void @author 何章懷曉 hezhanghuaixiao @date 2020/9/8 17:21 @other */ void downLoad(String url, File file, Authentic auth, Map<String, String> header) throws Exception;}

創(chuàng)建全局變量對不同模塊操作

/* @describe 全局變量 @params @return @author 何章懷曉 @date 2020/7/30 9:30 @other */public class _Global {public static String APP_KEY = '';public static String APP_CLIENT_ID = '';public static String APP_CLIENT_SECRET = '';//每頁數(shù)量public static int APP_PAGE_SIZE = 10;public static final int HTTP_METHOD_GET = 1;public static final int HTTP_METHOD_POST = 2;public static final int HTTP_METHOD_PUT = 3;public static final int HTTP_METHOD_DELETE = 4;public static final String URL_HOST = 'http://a1.easemob.com/'+APP_KEY.replace('#','/')+'/';public static final String URR_TOKEN = URL_HOST+'token';public static final String URL_CHAT = URL_HOST+'chatmessages';public static final String URL_GROUP = URL_HOST+'chatgroups';public static final String URL_FILE = URL_HOST+'chatfiles';public static final String URL_ROOM = URL_HOST+'chatrooms';public static final String URL_MESSAGES = URL_HOST+'messages';public static final String URL_USER = URL_HOST+'users';}

請求管理類

package com.hedashi.protal.service.impl;import com.hedashi.protal.model.TalkNode;import com.hedashi.protal.model.Authentic;import com.hedashi.protal.service.TalkHttpService;import com.hedashi.protal.util.JsonTool;import com.hedashi.protal.util._Global;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.net.URI;import java.util.Map;import java.util.Map.Entry;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.client.methods.HttpDelete;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.client.methods.HttpPut;import org.apache.http.entity.StringEntity;import org.apache.http.entity.mime.MultipartEntity;import org.apache.http.entity.mime.content.ContentBody;import org.apache.http.entity.mime.content.FileBody;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.util.EntityUtils;import org.springframework.stereotype.Service;@Servicepublic class TalkHttpServiceImplApache implements TalkHttpService { /** @describe @param * @param url 請求路徑 * @param method 方式 * @param param 參數(shù) * @param auth 認(rèn)證 * @param field 將相應(yīng)結(jié)果封裝到本地 @return com.hedashi.protal.model.TalkNode @author 何章懷曉 hezhanghuaixiao @date 2020/9/8 17:39 @other */ @Override public TalkNode request(String url, int method, Object param, Authentic auth, String[][] field) throws Exception { //獲得可關(guān)閉的連接 CloseableHttpClient client = this.getClient(); try { HttpResponse response = null; //區(qū)分請求方式 switch (method) { case _Global.HTTP_METHOD_GET: //構(gòu)建請求 HttpGet get = new HttpGet(url); if (auth != null) { //如果未認(rèn)證 請求認(rèn)證 auth.applyAuthentication(get); } //固定請求頭信息為JSON get.addHeader('Content-Type', 'application/json'); response = client.execute(get); break; case _Global.HTTP_METHOD_POST: HttpPost post = new HttpPost(url); if (auth != null) { auth.applyAuthentication(post); } //POST攜帶參數(shù) if (param != null) { //參數(shù)編碼放入請求體 post.setEntity(new StringEntity(JsonTool.write(param), 'UTF-8')); } post.addHeader('Content-Type', 'application/json'); response = client.execute(post); break; case _Global.HTTP_METHOD_PUT: HttpPut put = new HttpPut(url); if (put != null) { auth.applyAuthentication(put); } if (param != null) { put.setEntity(new StringEntity(JsonTool.write(param), 'UTF-8')); } put.addHeader('Content-Type', 'application/json'); response = client.execute(put); break; case _Global.HTTP_METHOD_DELETE: HttpDelete delete = new HttpDelete(url); if (auth != null) { auth.applyAuthentication(delete); } delete.addHeader('Content-Type', 'application/json'); response = client.execute(delete); break; default: throw new Exception('非法請求方式'); } int code = response.getStatusLine().getStatusCode(); //判斷返回code 如果為200 if (code == HttpStatus.SC_OK) { //獲取響應(yīng)體 HttpEntity entity = response.getEntity(); if (entity != null) { //解析 String json = EntityUtils.toString(entity, 'UTF-8'); if (field != null && field.length > 0) { for (String[] temp : field) { json = json.replace(temp[0], temp[1]); } } //解析為實體類 TalkNode talkNode = (TalkNode) JsonTool.read(json, TalkNode.class); talkNode.setStatusCode(code); return talkNode; } } else { //非200將code返回 return new TalkNode(code); } } catch (Exception e) { throw e; } finally { client.close(); } return null; } @Override public TalkNode upload(String url, File file, Authentic auth, String[][] equal) throws Exception { CloseableHttpClient client = this.getClient(); try { HttpPost post = new HttpPost(); post.setURI(new URI(url)); if (auth != null) { auth.applyAuthentication(post); } post.addHeader('restrict-access', 'true'); ContentBody body = new FileBody(file); MultipartEntity part = new MultipartEntity(); part.addPart('file', body); post.setEntity(part); HttpResponse response = client.execute(post); int code = response.getStatusLine().getStatusCode(); if (code == HttpStatus.SC_OK) { HttpEntity entity = response.getEntity(); if (entity != null) { String json = EntityUtils.toString(entity, 'UTF-8'); if (equal != null && equal.length > 0) { for (String[] temp : equal) { json = json.replace(temp[0], temp[1]); } } TalkNode talkNode = (TalkNode) JsonTool.read(json, TalkNode.class); talkNode.setStatusCode(code); return talkNode; } } } catch (Exception e) { throw e; } finally { client.close(); } return null; } @Override public void downLoad(String url, File file, Authentic auth, Map<String, String> header) throws Exception { CloseableHttpClient client = this.getClient(); try { HttpGet get = new HttpGet(); get.setURI(new URI(url)); if (auth != null) { auth.applyAuthentication(get); } for (Entry<String, String> en : header.entrySet()) { get.addHeader(en.getKey(), en.getValue()); } HttpResponse response = client.execute(get); if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { HttpEntity entity = response.getEntity(); if (entity != null) { InputStream in = entity.getContent(); FileOutputStream fos = new FileOutputStream(file); byte[] data = new byte[10 * 1024]; int len = 0; while ((len = in.read(data)) != -1) { fos.write(data, 0, len); } fos.flush(); fos.close(); in.close(); } } } catch (Exception e) { throw e; } finally { client.close(); } } private CloseableHttpClient getClient() { return HttpClients.createDefault(); }}

創(chuàng)建業(yè)務(wù)請求和響應(yīng)格式類

package com.hedashi.protal.model;import java.util.List;import java.util.Map;/** @describe 根據(jù)不同的業(yè)務(wù)封裝不同的返回結(jié)果,該格式在發(fā)送請求的時候就被指定 @author 何章懷曉 hezhanghuaixiao @date 2020/9/8 17:42 @other */public class TalkNode { public static final String[][] DATA_ENTITIES = new String[][]{{'entities', 'entities_share'}, {'share-secret', 'share_secret'}}; public static final String[][] DATA_ARRAY = new String[][]{{'data', 'data_array'}}; public static final String[][] DATA_LIST = new String[][]{{'data', 'data_list'}}; public static final String[][] DATA_MAP = new String[][]{{'data', 'data_map'}}; public static final String[][] DATA_CHAT_LIST = new String[][]{{'entities', 'data_chat_list'}}; public static final String[][] DATA_ROOM = new String[][]{{'data', 'data_room'}}; public static final String[][] DATA_ROOM_LIST = new String[][]{{'data', 'data_room_list'}, {'public', 'public_room'}}; public static final String[][] DATA_ROOM_REDO = new String[][]{{'data', 'data_room_rodo'}}; public static final String[][] DATA_ROOM_REDO_LIST = new String[][]{ {'data', 'data_room_redo_list'}}; public static final String[][] DATA_GROUP = new String[][]{{'data', 'data_group'}}; public static final String[][] DATA_GROUP_UPDATE = new String[][]{{'data', 'data_group_update'}}; public static final String[][] DATA_GROUP_OWNER = new String[][]{{'data', 'data_group_owner'}}; public static final String[][] DATA_GROUP_LIST = new String[][]{{'data', 'data_group_list'}}; public static final String[][] DATA_GROUP_LIST_MEMBER = new String[][]{ {'data', 'data_group_list_member'}}; public static final String[][] DATA_GROUP_LIST_NEW = new String[][]{ {'data', 'data_group_list_new'}, {'public', 'public_group'}}; public static final String[][] DATA_GROUP_FRIEND = new String[][]{{'data', 'data_group_friend'}}; public static final String[][] DATA_GROUP_FRIEND_LIST = new String[][]{ {'data', 'data_group_friend_list'}}; private String access_token; private String action; private String application; private String applicationName; private Long count; private String cursor; private Integer duration; private Long expires_in; private String organization; private String path; private Integer statusCode; private Long timestamp; private String uri; private Map<String, Object> params; private TalkUser user; private List<TalkUser> entities; private String[] data_array; private Map<String, String> data_map; private List<Map<String, Object>> data_list; private List<TalkMsg> data_chat_list; private TalkRoom data_room; private List<TalkRoom> data_room_list; private TalkRoomRedo data_room_rodo; private List<TalkRoomRedo> data_room_redo_list; private TalkGroup data_group; private TalkGroupMember data_group_update; private TalkGroupMember data_group_owner; private List<TalkGroup> data_group_list; private List<TalkGroupMember> data_group_list_member; private List<TalkGroupNew> data_group_list_new; private TalkGroupFriend data_group_friend; private List<TalkGroupFriend> data_group_friend_list; public TalkNode() { } public TalkNode(Integer statusCode) { this.statusCode = statusCode; } public String getAccess_token() { return access_token; } public void setAccess_token(String access_token) { this.access_token = access_token; } public String getAction() { return action; } public void setAction(String action) { this.action = action; } public String getApplication() { return application; } public void setApplication(String application) { this.application = application; } public String getApplicationName() { return applicationName; } public void setApplicationName(String applicationName) { this.applicationName = applicationName; } public Long getCount() { return count; } public void setCount(Long count) { this.count = count; } public String getCursor() { return cursor; } public void setCursor(String cursor) { this.cursor = cursor; } public Integer getDuration() { return duration; } public void setDuration(Integer duration) { this.duration = duration; } public Long getExpires_in() { return expires_in; } public void setExpires_in(Long expires_in) { this.expires_in = expires_in; } public String getOrganization() { return organization; } public void setOrganization(String organization) { this.organization = organization; } public String getPath() { return path; } public void setPath(String path) { this.path = path; } public Integer getStatusCode() { return statusCode; } public void setStatusCode(Integer statusCode) { this.statusCode = statusCode; } public Long getTimestamp() { return timestamp; } public void setTimestamp(Long timestamp) { this.timestamp = timestamp; } public String getUri() { return uri; } public void setUri(String uri) { this.uri = uri; } public Map<String, Object> getParams() { return params; } public void setParams(Map<String, Object> params) { this.params = params; } public TalkUser getUser() { return user; } public void setUser(TalkUser user) { this.user = user; } public List<TalkUser> getEntities() { return entities; } public void setEntities(List<TalkUser> entities) { this.entities = entities; } public String[] getData_array() { return data_array; } public void setData_array(String[] data_array) { this.data_array = data_array; } public Map<String, String> getData_map() { return data_map; } public void setData_map(Map<String, String> data_map) { this.data_map = data_map; } public List<Map<String, Object>> getData_list() { return data_list; } public void setData_list(List<Map<String, Object>> data_list) { this.data_list = data_list; } public List<TalkMsg> getData_chat_list() { return data_chat_list; } public void setData_chat_list(List<TalkMsg> data_chat_list) { this.data_chat_list = data_chat_list; } public TalkRoom getData_room() { return data_room; } public void setData_room(TalkRoom data_room) { this.data_room = data_room; } public List<TalkRoom> getData_room_list() { return data_room_list; } public void setData_room_list(List<TalkRoom> data_room_list) { this.data_room_list = data_room_list; } public TalkRoomRedo getData_room_rodo() { return data_room_rodo; } public void setData_room_rodo(TalkRoomRedo data_room_rodo) { this.data_room_rodo = data_room_rodo; } public List<TalkRoomRedo> getData_room_redo_list() { return data_room_redo_list; } public void setData_room_redo_list(List<TalkRoomRedo> data_room_redo_list) { this.data_room_redo_list = data_room_redo_list; } public TalkGroup getData_group() { return data_group; } public void setData_group(TalkGroup data_group) { this.data_group = data_group; } public TalkGroupMember getData_group_update() { return data_group_update; } public void setData_group_update(TalkGroupMember data_group_update) { this.data_group_update = data_group_update; } public TalkGroupMember getData_group_owner() { return data_group_owner; } public void setData_group_owner(TalkGroupMember data_group_owner) { this.data_group_owner = data_group_owner; } public List<TalkGroup> getData_group_list() { return data_group_list; } public void setData_group_list(List<TalkGroup> data_group_list) { this.data_group_list = data_group_list; } public List<TalkGroupMember> getData_group_list_member() { return data_group_list_member; } public void setData_group_list_member( List<TalkGroupMember> data_group_list_member) { this.data_group_list_member = data_group_list_member; } public List<TalkGroupNew> getData_group_list_new() { return data_group_list_new; } public void setData_group_list_new(List<TalkGroupNew> data_group_list_new) { this.data_group_list_new = data_group_list_new; } public TalkGroupFriend getData_group_friend() { return data_group_friend; } public void setData_group_friend(TalkGroupFriend data_group_friend) { this.data_group_friend = data_group_friend; } public List<TalkGroupFriend> getData_group_friend_list() { return data_group_friend_list; } public void setData_group_friend_list( List<TalkGroupFriend> data_group_friend_list) { this.data_group_friend_list = data_group_friend_list; }}

工具類

public class HuanXinUtil {private static TalkDataService service = null;/** @describe 初始化 @param* @param @return void @author 何章懷曉 hezhanghuaixiao @date 2020/9/8 17:26 @other */private static void init(){if(service == null){// 初始服務(wù)端TokenAuthentic.Token token = new Authentic(new TalkHttpServiceImplApache()).getToken();//token和過期時間Authentic.Token TEST_TOKEN = new Authentic.Token(token.getToken(),token.getExpire());//新建一個鏈接服務(wù)service = new TalkDataServiceImpl(new TalkHttpServiceImplApache());// 修改數(shù)據(jù)業(yè)務(wù)Tokenservice.setToken(TEST_TOKEN);}}/** @describe 添加管理員 @param * @param groupId 群組id * @param userid 管理員id @return boolean @author 何章懷曉 hezhanghuaixiao @date 2020/9/8 17:54 @other */public static boolean addGroupManager(String groupId,String userid) {try {init();TalkNode talkNode = service.addGroupManager(groupId,userid);if(talkNode.getStatusCode()==200){return true;}} catch (Exception e) {e.printStackTrace();}return false;}}

service調(diào)用

@Override public TalkNode addGroupManager(String id, String userId) throws Exception { Map<String, Object> param = new HashMap<String, Object>(); param.put('newadmin', userId); return service.request(_Global.URL_GROUP + '/' + id + '/admin', _Global.HTTP_METHOD_POST, param, auth, TalkNode.DATA_GROUP); }

/** * @param [groupId, managerId] * @return com.hedashi.common.api.CommonResult * @describe 后臺添加群組管理員 * @author 何章懷曉 hezhanghuaixiao * @date 2020/9/8 14:28 * @other */ @Override public CommonResult addGroupManager(String groupId, String managerId) { boolean b = HuanXinUtil.addGroupManager(groupId, managerId); if(b){ System.out.println('環(huán)信添加管理員成功=========================='); //本地添加管理員 addGroupAdmin(groupId,managerId); return CommonResult.success('SUCCESS'); } return CommonResult.failed('FAILED'); }

@ApiOperation(value = '群組添加管理員') @RequestMapping(value = '/addGroupManager', method = RequestMethod.POST) @ResponseBody public CommonResult<HeAdmin> addGroupManager( @RequestParam @ApiParam(value = '群組環(huán)信ID', required = true) String groupId, @RequestParam @ApiParam(value = '管理員環(huán)信id', required = true) String managerId ) { return heUGroupService.addGroupManager(groupId,managerId); }

swagger調(diào)用

java實現(xiàn)即時通信的完整步驟分享

token 信息

{“application”:“53e3eeb5-6926-46dd-bc61-4e214342ef7e”,“access_token”:“YWMtXDS-uPG6EeqItFktBQxljAAAAAAAAAAAAAAAAAAAAAFT4-61aSZG3bxhTiFDQu9-AgMAAAF0bSppWwBPGgBXDkgrlvguBLEe966D_LnbgNyNz2OOsTgP4okhQGoOdA”,“expires_in”:5184000}

swagger返回結(jié)果

java實現(xiàn)即時通信的完整步驟分享

控制臺

java實現(xiàn)即時通信的完整步驟分享

數(shù)據(jù)庫:

java實現(xiàn)即時通信的完整步驟分享

總結(jié)

到此這篇關(guān)于java實現(xiàn)即時通信的文章就介紹到這了,更多相關(guān)java實現(xiàn)即時通信內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 氟塑料磁力泵-不锈钢离心泵-耐腐蚀化工泵厂家「皖金泵阀」 | 对辊破碎机_四辊破碎机_双齿辊破碎机_华盛铭重工 | 加盟店-品牌招商加盟-创业项目商机平台 | 宿松新闻网 宿松网|宿松在线|宿松门户|安徽宿松(直管县)|宿松新闻综合网站|宿松官方新闻发布 | 工业洗衣机_工业洗涤设备_上海力净工业洗衣机厂家-洗涤设备首页 bkzzy在职研究生网 - 在职研究生招生信息咨询平台 | 防水套管|柔性防水套管|伸缩器|伸缩接头|传力接头-河南伟创管道 防水套管_柔性防水套管_刚性防水套管-巩义市润达管道设备制造有限公司 | IHDW_TOSOKU_NEMICON_EHDW系列电子手轮,HC1系列电子手轮-上海莆林电子设备有限公司 | 中国品牌门窗网_中国十大门窗品牌_著名门窗品牌 | 山东钢格板|栅格板生产厂家供应商-日照森亿钢格板有限公司 | 股票入门基础知识_股票知识_股票投资大师_格雷厄姆网 | 集装箱标准养护室-集装箱移动式养护室-广州璟业试验仪器有限公司 | 蓝米云-专注于高性价比香港/美国VPS云服务器及海外公益型免费虚拟主机 | 没斑啦-专业的祛斑美白嫩肤知识网站-去斑经验分享 | 可程式恒温恒湿试验箱|恒温恒湿箱|恒温恒湿试验箱|恒温恒湿老化试验箱|高低温试验箱价格报价-广东德瑞检测设备有限公司 | 篮球架_乒乓球台_足球门_校园_竞技体育器材_厂家_价格-沧州浩然体育器材有限公司 | 防水套管-柔性防水套管-刚性防水套管-上海执品管件有限公司 | 筒瓦厂家-仿古瓦-寺庙-古建琉璃瓦-宜兴市古典园林建筑陶瓷厂有限公司 | 北京开源多邦科技发展有限公司官网| 北京普辉律师事务所官网_北京律师24小时免费咨询|法律咨询 | 全自动包装秤_全自动上袋机_全自动套袋机_高位码垛机_全自动包装码垛系统生产线-三维汉界机器(山东)股份有限公司 | 加中寰球移民官网-美国移民公司,移民机构,移民中介,移民咨询,投资移民 | 艺术生文化课培训|艺术生文化课辅导冲刺-济南启迪学校 | 蒸汽吸附分析仪-进口水分活度仪|康宝百科| 武汉EPS线条_EPS装饰线条_EPS构件_湖北博欧EPS线条厂家 | 阴离子_阳离子聚丙烯酰胺厂家_聚合氯化铝价格_水处理絮凝剂_巩义市江源净水材料有限公司 | 苏商学院官网 - 江苏地区唯一一家企业家自办的前瞻型、实操型商学院 | 碳化硅,氮化硅,冰晶石,绢云母,氟化铝,白刚玉,棕刚玉,石墨,铝粉,铁粉,金属硅粉,金属铝粉,氧化铝粉,硅微粉,蓝晶石,红柱石,莫来石,粉煤灰,三聚磷酸钠,六偏磷酸钠,硫酸镁-皓泉新材料 | 耐磨陶瓷管道_除渣器厂家-淄博浩瀚陶瓷科技有限公司 | 台湾HIWIN上银直线模组|导轨滑块|TBI滚珠丝杆丝杠-深圳汉工 | 细砂提取机,隔膜板框泥浆污泥压滤机,螺旋洗砂机设备,轮式洗砂机械,机制砂,圆锥颚式反击式破碎机,振动筛,滚筒筛,喂料机- 上海重睿环保设备有限公司 | 皮带式输送机械|链板式输送机|不锈钢输送机|网带输送机械设备——青岛鸿儒机械有限公司 | 利浦顿蒸汽发生器厂家-电蒸汽发生器/燃气蒸汽发生器_湖北利浦顿热能科技有限公司官网 | 上海皓越真空设备有限公司官网-真空炉-真空热压烧结炉-sps放电等离子烧结炉 | 杰福伦_磁致伸缩位移传感器_线性位移传感器-意大利GEFRAN杰福伦-河南赉威液压科技有限公司 | 一氧化氮泄露报警器,二甲苯浓度超标报警器-郑州汇瑞埔电子技术有限公司 | 精密五金冲压件_深圳五金冲压厂_钣金加工厂_五金模具加工-诚瑞丰科技股份有限公司 | 翰墨AI智能写作助手官网_人工智能问答在线AI写作免费一键生成 | 走心机厂家,数控走心机-台州博城智能科技有限公司 | 江苏皓越真空设备有限公司 | 压力变送器-上海武锐自动化设备有限公司 | 安全光栅|射频导纳物位开关|音叉料位计|雷达液位计|两级跑偏开关|双向拉绳开关-山东卓信机械有限公司 |