教程,iapp sot换mjava的socket实现通信跨语
iapp吧
全部回复
仅看楼主
level 5
教程,iapp sot换mjava的socket实现通信跨语言跨平台
这是想法来源:[惊哭]
1.为了和linux平台下写的python程序通信
教程在楼下发,写这个的目的也是看到了网上通篇找了没看到啥写的很具体的教程,所以就写出来,指引大家少走弯路,教程最后会分享出来mjava源码,和iapp call实例,方便大家调用
2019年09月09日 06点09分 1
level 5
https://tieba.baidu.com/p/5807415128?red_tag=0560937181
参考这位大佬的sot,发现存在bug,信息一发送,app直接闪退,无法跨平台通信
2019年09月09日 07点09分 2
咦,这不是我一年前写的文章吗[滑稽][滑稽] 不过,不是bug。而是iapp作者定义头信息了,不能直接用原始tcp/ip协议,导至通信麻烦,必须符合iapp自定义协议才行。 不过,最近正好弄通信,你的java代码我要了,就不用重新再封装一个类了[阴险][阴险]
2019年09月13日 04点09分
level 5
1.使用的工具,iapp,idea(写java方便),pycahrm
2019年09月09日 12点09分 4
Java代码在idea里面调试方便,高亮提示,自动补全,语法检查,强烈推荐
2019年09月09日 12点09分
level 5
3.先上代码
一共写了4个socket相关的主要功能,连接,写,读取,关闭
(建议如果要和别的语言通信,iapp做客户端,需要断开socket的时候,主动断开比较好,不会出bug,服务器只要做异常处理,try---except就可以了)
2019年09月09日 12点09分 5
level 5
4.iapp中怎么调用?
查看手册知道,call就是用来做交互的,所以调用就好了,会java的兄弟可以建立mjava,来直接写,不会java的也没关系,直接按照我给出的示例调用就好了
2019年09月09日 12点09分 6
level 5
连接:
rec_ip:要连接的IP,文本型
8668:连接的端口
pro:返回值,返回的这个是java的特定socket类型,下面的sss.conn指得就是这个,可以建立一个全局变量保存起来sss conn = pro
call(pro,"mjava","Socket.ConnectTcp",rec_ip,8668)
发送数据:
sss.conn:连接以后,java返回的socket类型
sss.choice:要发送的数据,文本格式
isWriteok2:如果发送成功返回true,否则返回false
call(isWriteok2,"mjava","Socket.Write",sss.conn,sss.choice)
读取数据:
记得加一个w(true)循环,因为非阻塞式读取
sss.conn:连接以后,java返回的socket类型
str:返回值,收到的数据
call(str,"mjava","Socket.Read",sss.conn)
断开socket连接
如果是和其他语言通信,需要断开连接的时候,客户端这边主动断开比较好
sss.conn:连接以后,java返回的socket类型
isclose:是否关闭,是返回true
call(isclose,"mjava","Socket.Close",sss.conn)
2019年09月09日 12点09分 7
level 5
5.java源码如下,建立一个mjava保存起来,call调用就好了
2019年09月09日 12点09分 8
level 5
import android.util.DisplayMetrics;
import android.app.Activity;
import java.io.OutputStream;
import java.net.*;
import java.io.*;
import android.app.Activity;
public static Object[] ConnectTcp( String ip, int port )
{
DataOutputStreamout;
DataInputStreamin;
try
{
Socket client = new Socket( ip, port );
/* 输出 */
OutputStream outToServer = client.getOutputStream();
System.out.println( outToServer );
/* out = new DataOutputStream(outToServer); */
/* 输入 */
InputStream inFromServer = client.getInputStream();
/* in = new DataInputStream(inFromServer); */
/* 返回自定义数据对象 */
BufferedWriterBw= new BufferedWriter( new OutputStreamWriter( outToServer ) );
BufferedReaderBr= new BufferedReader( new InputStreamReader( inFromServer ) );
Object[] data = new Object[] { Bw, Br, client };
return(data);
}catch ( IOException e )
{
e.printStackTrace();
String i = "1";
Object[] data = new Object[] { i };
return(data);
}
}
/* Tcp发送信息--发送成功返回True,失败返回False */
public static boolean Write( Object[] data, String Str )
{
BufferedWriter out = (BufferedWriter) data[0];
try {
out.write( Str );
out.flush();
}catch ( IOException e ) {
return(false);
}
return(true);
}
public static String Read( Object[] data )
{
BufferedReaderin = (BufferedReader) data[1];
Stringindata;
try {
indata = in.readLine();
return(indata);
}catch ( IOException e ) {
return(null);
}
}
public static boolean Close( Object[] data )
{
Socket client = (Socket) data[2];
try {
client.close();
}catch ( IOException e ) {
return(false);
}
return(true);
}
public static boolean IsConnect(Object[] data){
Socket client = (Socket) data[2];
SocketAddress Check = client.getRemoteSocketAddress();
return Check != null;
}
2019年09月09日 12点09分 9
level 5
6.iapp,call调用的方式如下,以防万一我还是写出来,直观点[呵呵]
2019年09月09日 12点09分 10
level 13

2019年09月09日 15点09分 12
该去哪去哪[滑稽]
2019年09月09日 19点09分
level 10
5.0的sot估计要改版。
2019年09月10日 02点09分 13
level 5
8.意外发现少给了一串代码,现在补上,尽量做的十全十美[挖鼻]
2019年09月11日 03点09分 14
level 5
public static boolean IsConnect(Object[] data){
Socket client = (Socket) data[2];
SocketAddress Check = client.getRemoteSocketAddress();
return Check != null;
}
2019年09月11日 03点09分 15
level 5
这是根据sss.conn判断当前socket是否连接
2019年09月11日 03点09分 16
iapp有个坑的地方,如果发现无法根据sss.conn判断是否连接,但是syso sss.conn又存在。 界面需要s a = sss.conn重新赋值一遍,再把a作为参数传入
2019年09月11日 03点09分
level 12
这是我修改后的代码,把没有用的变量删除掉了。希望对你有用
2019年09月13日 05点09分 17
1 2 尾页