本人用的是UDP,现在客户端不能发消息给服务器,不知道怎么回事代码如下:
客户端代码
public class ChatRoom extends Activity {
private EditText chattxt;
private TextView chattxt2;
private Button chatok;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.chatroom);
findviews();
setonclick();
} public void findviews() {
chattxt = (EditText) this.findViewById(R.id.chattxt);
chattxt2 = (TextView) this.findViewById(R.id.chattxt2);
chatok = (Button) this.findViewById(R.id.chatOk);
} private void setonclick() {
chatok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
connecttoserver(chattxt.getText().toString());
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
public void connecttoserver(String socketData) throws UnknownHostException, IOException
{
byte[] buf=new byte[500];
socketData.getBytes(0,socketData.length(),buf,0);
//连接服务器
DatagramPacket sendPacket=new DatagramPacket(buf, socketData.length(), new InetSocketAddress("10.0.2.2",5000));
DatagramSocket sendSocket=new DatagramSocket( 9999);//有时候这里老报这里端口被占
//发送数据包
sendSocket.send(sendPacket);
sendSocket.close();
}
public void receiveMessage()
{
try {
DatagramSocket receiveSocket=new DatagramSocket(5000);
byte buf[]=new byte[500];
DatagramPacket receivePacket=new DatagramPacket(buf, buf.length);
while(true)
{
receiveSocket.receive(receivePacket);//接收数据包
String msg=new String(receivePacket.getData(),0,receivePacket.getLength());
this.chattxt2.append(msg+"\n");//显示接收到的信息
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}请高手帮忙指点一下!!!
客户端代码
public class ChatRoom extends Activity {
private EditText chattxt;
private TextView chattxt2;
private Button chatok;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.chatroom);
findviews();
setonclick();
} public void findviews() {
chattxt = (EditText) this.findViewById(R.id.chattxt);
chattxt2 = (TextView) this.findViewById(R.id.chattxt2);
chatok = (Button) this.findViewById(R.id.chatOk);
} private void setonclick() {
chatok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
connecttoserver(chattxt.getText().toString());
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
public void connecttoserver(String socketData) throws UnknownHostException, IOException
{
byte[] buf=new byte[500];
socketData.getBytes(0,socketData.length(),buf,0);
//连接服务器
DatagramPacket sendPacket=new DatagramPacket(buf, socketData.length(), new InetSocketAddress("10.0.2.2",5000));
DatagramSocket sendSocket=new DatagramSocket( 9999);//有时候这里老报这里端口被占
//发送数据包
sendSocket.send(sendPacket);
sendSocket.close();
}
public void receiveMessage()
{
try {
DatagramSocket receiveSocket=new DatagramSocket(5000);
byte buf[]=new byte[500];
DatagramPacket receivePacket=new DatagramPacket(buf, buf.length);
while(true)
{
receiveSocket.receive(receivePacket);//接收数据包
String msg=new String(receivePacket.getData(),0,receivePacket.getLength());
this.chattxt2.append(msg+"\n");//显示接收到的信息
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}请高手帮忙指点一下!!!
解决方案 »
- C#.net编写android访问的webservic时需要哪些修改
- 请问要怎么实现如图所示的功能,如有源码更好
- android源码导入eclipse,framework层如果是通过实现aidl接口的函数无法实现单步调试
- 怎么写程序实现长按HOME键进行进程切换的功能?进程不重新创建直接恢复运行
- android 触摸板颜色问题
- 新浪微博api里要用到curl 有人懂吗
- SurfaceView 添加到 悬浮窗 有错误
- Android手机通过Wifi与PC机之间进行通信问题 (有代码)
- android源码亮灭屏实现
- 安卓聊天程序是自己开发还是用第三方的好?
- Android应用程序运行出错
- opengl中触摸移动,先获得开始的坐标,怎样获得移动后的目标坐标呢!!
你对sendSocket,receiveSocket都没有释放资源,建议ondestroy()和finally中执行sendSocket.disconnect();sendSocket.close();
DatagramPacket sendPacket=new DatagramPacket(buf, socketData.length(), new InetSocketAddress("10.0.2.2",5000));
改为
DatagramPacket sendPacket=new DatagramPacket(buf, socketData.length(), InetAddress.getByName("10.0.2.2",),5000);
试试看吧