Android 开发类似微信的程序 Android微信传递语音 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 LZ这是p2p通信啊穿墙技术,有点难,可以去了解下, P2P技术 。不会PCM信号 iLBC压缩发送吧 呃,你说的好高深啊,我以为录音然后socket通信发送就行了呢,能具体说说吗 服务器给客户端分配IP?我觉得我的网络是白学了,那路由层是干什么的……服务器的IP是谁分配的…… ------------------------------------------------------AutoCSDN签名档------------------------------------------------------ ip不是服务器分配的把,客户登陆时可以用socket或是用servlet。客户端之间通信可以使用udp(datagramsocket) 引用 11 楼 hankcs 的回复:服务器给客户端分配IP?我觉得我的网络是白学了,那路由层是干什么的……服务器的IP是谁分配的…… ------------------------------------------------------AutoCSDN签名档------------------------------------------------------ 是的 我告诉你是怎么回事吧 应该是你听错了或者理解错了。不是服务器给动态分配的ip。。是客户端与服务器通信是服务器获得的客户端ip 你可以全程用UDP 来通信。是毕业设计么。。UDP足够了。。你的客户端只用一个socket当服务器获得你客户端的ip后告诉其他客户端。。然后他们之间就能通信了(这只是局域网的情况外网要稍复杂点)或者靠服务器来转发消息也是可以的 太好了,你发到我邮箱吧,谢谢 [email protected] 是的 我告诉你是怎么回事吧 应该是你听错了或者理解错了。不是服务器给动态分配的ip。。是客户端与服务器通信是服务器获得的客户端ip 你可以全程用UDP 来通信。是毕业设计么。。UDP足够了。。你的客户端只用一个socket当服务器获得你客户端的ip后告诉其他客户端。。然后他们之间就能通信了(这只是局域网的情况外网要稍复杂点)或者靠服务器来转发消息也是可以的嗯,ip那个确实是我理解错了,老师后来说让客户端把IP和用户名一起发给服务器,然后服务器放到数据库中,这样另外的客户端通过用户名搜索时,服务器就把对应的ip发给他。两者通信我是想让两个手机互为socket的服务器端和客户端,你觉得可行么,Android上做socket服务器还没搞定 感觉逻辑有点乱哦两个客户端是如何连接的?服务器基本上没有用了楼主的意思应该是,两个客户端 A 和 B 先连接到服务器上。然后服务器记录下这两个客户端的IP地址,然后 将A的IP地址给B,B的IP地址给A,这样,这两个客户端之间一方作为服务端(假设为A)的话,另外一方就可以使用A的IP地址来连接上去。他们之间的消息传递就可以直接点对点的了,不再需要通过服务器来中转了。不知道的理解是否正确? 感觉逻辑有点乱哦两个客户端是如何连接的?服务器基本上没有用了楼主的意思应该是,两个客户端 A 和 B 先连接到服务器上。然后服务器记录下这两个客户端的IP地址,然后 将A的IP地址给B,B的IP地址给A,这样,这两个客户端之间一方作为服务端(假设为A)的话,另外一方就可以使用A的IP地址来连接上去。他们之间的消息传递就可以直接点对点的了,不再需要通过服务器来中转了。不知道的理解是否正确?太对了,就是这样,可是怎么点对点呢 感觉逻辑有点乱哦两个客户端是如何连接的?服务器基本上没有用了楼主的意思应该是,两个客户端 A 和 B 先连接到服务器上。然后服务器记录下这两个客户端的IP地址,然后 将A的IP地址给B,B的IP地址给A,这样,这两个客户端之间一方作为服务端(假设为A)的话,另外一方就可以使用A的IP地址来连接上去。他们之间的消息传递就可以直接点对点的了,不再需要通过服务器来中转了。不知道的理解是否正确?太对了,就是这样,可是怎么点对点呢那就在手机客户端中再写一个 按照服务端的代码来写一个类似的, 就相当于手机既可以作为服务端又可以作为客户端这样的。 有个开源的消息服务器 openfire 楼主可以看下 感觉逻辑有点乱哦两个客户端是如何连接的?服务器基本上没有用了楼主的意思应该是,两个客户端 A 和 B 先连接到服务器上。然后服务器记录下这两个客户端的IP地址,然后 将A的IP地址给B,B的IP地址给A,这样,这两个客户端之间一方作为服务端(假设为A)的话,另外一方就可以使用A的IP地址来连接上去。他们之间的消息传递就可以直接点对点的了,不再需要通过服务器来中转了。不知道的理解是否正确?太对了,就是这样,可是怎么点对点呢那就在手机客户端中再写一个 按照服务端的代码来写一个类似的, 就相当于手机既可以作为服务端又可以作为客户端这样的。现在就是这样写的,可是老是有异常,不能用 package com.example.map2;import java.io.DataInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.io.PrintStream;import java.net.InetAddress;import java.net.NetworkInterface;import java.net.ServerSocket;import java.net.Socket;import java.net.SocketException;import java.net.UnknownHostException;import java.util.ArrayList;import java.util.Calendar;import java.util.Enumeration;import java.util.List;import org.apache.http.conn.util.InetAddressUtils;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.WindowManager;import android.widget.Button;import android.widget.EditText;import android.widget.ListView;import android.widget.TextView;public class Communication extends Activity{ private Button bt,btback,btadd; private TextView tv; private Socket socket; private String serverIpAddress; private ListView mListView; private ChatMsgViewAdapterRight mAdapterright; private ChatMsgViewAdapterLeft mAdapterleft; private EditText et; private List<ChatMsgEntity> mDataArrays = new ArrayList<ChatMsgEntity>(); LayoutInflater mLayoutInflater = null; private static final int REDIRECTED_SERVERPORT = 6000; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.comunication); mLayoutInflater = LayoutInflater.from(this); //启动activity时不自动弹出软键盘 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); bt = (Button) findViewById(R.id.btn_send); btback = (Button) findViewById(R.id.communicate_back_btn); btadd = (Button) findViewById(R.id.add_btn2); tv = (TextView) findViewById(R.id.myTextView); mListView = (ListView) findViewById(R.id.listview); et = (EditText) findViewById(R.id.et_sendmessage); serverIpAddress=getLocalIpAddress(); new Thread(new Runnable() { public void run() { try{ ServerSocket server =new ServerSocket( REDIRECTED_SERVERPORT);//在该端口监听 while(true) { Socket client =server.accept();//接受客户端请求 InputStream is=client.getInputStream(); OutputStream os=client.getOutputStream(); DataInputStream dis=new DataInputStream(is); String request=dis.readLine(); PrintStream out=new PrintStream(os);//取得客户端输出流 out.print(request); client.close(); server.close(); } }catch (UnknownHostException e) { tv.setText("ServerError1:"+e); e.printStackTrace(); } catch (IOException e) { tv.setText("ServerError2:"+e); e.printStackTrace(); } catch (Exception e) { tv.setText("ServerError3:"+e); e.printStackTrace(); } handler.sendEmptyMessage(0); } }).start(); bt.setOnClickListener(new OnClickListener() { public void onClick(View v) { new Thread(new Runnable() { public void run() { String str = et.getText().toString(); if (str.length() > 0) { try { ChatMsgEntity entity = new ChatMsgEntity(); entity.setDate(getDate()); entity.setName("本人"); entity.setMsgType(false); entity.setText(str); mDataArrays.add(entity); mAdapterright.notifyDataSetChanged(); et.setText(""); mListView.setSelection(mListView.getCount() - 1); InetAddress serverAddr = InetAddress.getByName(serverIpAddress); socket = new Socket(serverAddr, REDIRECTED_SERVERPORT);//创建连接到对方IP,6000端口号的socket InputStream is=socket.getInputStream(); OutputStream os=socket.getOutputStream(); PrintStream out = new PrintStream(os); out.println(str); DataInputStream dis=new DataInputStream(is); String request =dis.readLine(); ChatMsgEntity entity2 = new ChatMsgEntity(); entity2.setDate(getDate()); entity2.setName("朋友"); entity2.setMsgType(false); entity2.setText(request ); mDataArrays.add(entity2); mAdapterleft.notifyDataSetChanged(); mListView.setSelection(mListView.getCount() - 1); socket.close(); // Log.d("Client", "Client sent message"); } catch (UnknownHostException e) { tv.setText("Error1:"+e); e.printStackTrace(); } catch (IOException e) { tv.setText("Error2:"+e); e.printStackTrace(); } catch (Exception e) { tv.setText("Error3:"+e); e.printStackTrace(); } } handler.sendEmptyMessage(0); } }).start(); } }); btback.setOnClickListener(new OnClickListener() { public void onClick(View v) { finish(); } }); btadd.setOnClickListener(new OnClickListener() { public void onClick(View v) { finish(); } }); } private String getDate() { Calendar c = Calendar.getInstance(); String year = String.valueOf(c.get(Calendar.YEAR)); String month = String.valueOf(c.get(Calendar.MONTH)); String day = String.valueOf(c.get(Calendar.DAY_OF_MONTH) + 1); String hour = String.valueOf(c.get(Calendar.HOUR_OF_DAY)); String mins = String.valueOf(c.get(Calendar.MINUTE)); StringBuffer sbBuffer = new StringBuffer(); sbBuffer.append(year + "-" + month + "-" + day + " " + hour + ":" + mins); return sbBuffer.toString(); } public static String getLocalIpAddress(){ try{ for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { NetworkInterface intf = en.nextElement(); for (Enumeration<InetAddress> enumIpAddr = intf .getInetAddresses(); enumIpAddr.hasMoreElements();) { InetAddress inetAddress = enumIpAddr.nextElement(); if (!inetAddress.isLoopbackAddress() && InetAddressUtils.isIPv4Address(inetAddress.getHostAddress())) { return inetAddress.getHostAddress().toString(); } } } }catch (SocketException e) { // TODO: handle exception } return null; } //定义Handler对象 private Handler handler =new Handler(){ @Override //当有消息发送出来的时候就执行Handler的这个方法 public void handleMessage(Message msg){ super.handleMessage(msg); //处理UI } }; } 如果不依赖于服务器,则通信的终端既要做为服务端,又要做为客户端。之间采用socket通信。 呃,你说的好高深啊,我以为录音然后socket通信发送就行了呢,能具体说说吗安卓平台 录音会得到 8位的PCM音频信号。 通过压缩算法压缩一下音频资源, 然后在通过网络环节发送出去 能不能把你的你毕业设计发我一份 谢谢 邮箱:[email protected] 我现在有一个课程作业是要做一个和你相似的东西,也是实现客户端之间的直接通信,不过不是发语音,是实现类似微信的朋友圈。完全没有头绪呀,能不能把你的毕业设计发我一份呢,非常感谢呀 邮箱:[email protected] Log.d不能输出数组的下标 安装ADT时出现:Cannot complete the install because one or more required items could no SurfaceView设置背景颜色遮挡问题 camera Zoom changed 200分 求android中jni中文转码方法 android程序实例化问题 电脑控制手机程序(安卓) ListView中添加了HeaderView和FooterView后,onScroll参数不合意图 android源码编译出错 请问设计基于安卓的图书馆座位管理系统需要哪些技术,实现身份识别IC卡和指纹哪个更好实现 eclipse中安装ADT插件 如何将sqlite的数据库直接运用
ip不是服务器分配的把,客户登陆时可以用socket或是用servlet。客户端之间通信可以使用udp(datagramsocket)