学习Socket通信,首先创建了一个Java Project的服务端,代码如下://Server
package lin.server;import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;public class MyServer
{ public static void main(String[] args)
{
try
{
System.out.println("Server Started...");
ServerSocket server = new ServerSocket(8888);
while(true)
{
Socket client = server.accept();
OutputStream out = client.getOutputStream();
String msg = "Hello Android";
out.write(msg.getBytes());
out.flush();
client.close();
}
} catch (IOException e)
{
e.printStackTrace();
} }}然后创建一个Android Project客户端
代码如下:package lin.client;import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;public class ClientActivity extends Activity {
/** Called when the activity is first created. */
private TextView msgTextView = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.socket);
msgTextView = (TextView)findViewById(R.id.textview_msg);
try
{
Socket server = new Socket(InetAddress.getLocalHost(),8888);
InputStream in = server.getInputStream();
byte[] buffer = new byte[in.available()];
in.read(buffer);
String msg = new String(buffer);
msgTextView.setText(msg);
} catch (UnknownHostException e)
{
e.printStackTrace();
}
catch (IOException e) {
System.out.println("郁闷的地方");
e.printStackTrace();
}
}
}
我的布局文件如下:<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/textview_msg"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="等待接收服务器的信息......"
/>
</LinearLayout>我先运行服务器端,再运行客户端,可是在客户端的TextView并不能显示从服务器端得来的消息,经过调试,发现,客户端捕捉到了异常,我已经用.printStackTrace();打印异常了,可是不知道在哪里得到这些打印出来的信息,求指教!
顺便请教我的代码哪个地方出粗咯。谢谢各位!
package lin.server;import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;public class MyServer
{ public static void main(String[] args)
{
try
{
System.out.println("Server Started...");
ServerSocket server = new ServerSocket(8888);
while(true)
{
Socket client = server.accept();
OutputStream out = client.getOutputStream();
String msg = "Hello Android";
out.write(msg.getBytes());
out.flush();
client.close();
}
} catch (IOException e)
{
e.printStackTrace();
} }}然后创建一个Android Project客户端
代码如下:package lin.client;import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;public class ClientActivity extends Activity {
/** Called when the activity is first created. */
private TextView msgTextView = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.socket);
msgTextView = (TextView)findViewById(R.id.textview_msg);
try
{
Socket server = new Socket(InetAddress.getLocalHost(),8888);
InputStream in = server.getInputStream();
byte[] buffer = new byte[in.available()];
in.read(buffer);
String msg = new String(buffer);
msgTextView.setText(msg);
} catch (UnknownHostException e)
{
e.printStackTrace();
}
catch (IOException e) {
System.out.println("郁闷的地方");
e.printStackTrace();
}
}
}
我的布局文件如下:<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/textview_msg"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="等待接收服务器的信息......"
/>
</LinearLayout>我先运行服务器端,再运行客户端,可是在客户端的TextView并不能显示从服务器端得来的消息,经过调试,发现,客户端捕捉到了异常,我已经用.printStackTrace();打印异常了,可是不知道在哪里得到这些打印出来的信息,求指教!
顺便请教我的代码哪个地方出粗咯。谢谢各位!
解决方案 »
- android 平板分辨率的问题
- android 百度地图 能否在service中定位?
- android SDK Manager 下载失败
- 关于TelephonyManager方法调用失败的问题
- 求助 关于simpleCursorAdapter映射到ListView的ImageView问题
- 运行Google Android源码错误
- 请教android的UI布局问题
- 乔布斯走了,面对Android的冲击,苹果未来的命运会如何?
- android DatagramSocket 异常
- 写一个累死滴滴打车的软件有多难?
- ListView点击时候的效果 背景颜色 在线等!!!
- 单行的布局 如何给他弄成两个相等长度的文本呢 在线等!!
1.权限:<uses-permission android:name="android.permission.INTERNET"/>
2.应该是Server发送 Client接收 你应该是写反了。
java.net.SocketException: Permission denied
网上查了之后,解释如下:
这是一个经典错误, Socket不能对外连接,错误不会被报出,调试的时候,能看到Exception, 一般是抛出 java.net.socketexception permission denied这个异常。
只要你的程序想联网,就会抛出这个异常,最终联网失败。
原因是: 需要访问到网络必须要有权限,
在AndroidManifest.xml中,需要进行如下配置:
<uses-permission android:name="android.permission.INTERNET" />但是我在AndroidManifest.xml添加上<uses-permission android:name="android.permission.INTERNET" />
之后,运行程序,又报出这样的错误,说这句
Socket server = new Socket(InetAddress.getLocalHost(),8888);
抛出异常
java.net.ConnectionException -----Connection Refused
郁闷了,这个问题该怎么解决啊!
java.net.ConnectionException -----Connection Refused回复2楼:
感谢你的回答,但是我是照着书上敲的代码,服务器发送,客户端接收,应该没有写反吧
最近学习Android时,创建Socket对象进行网络连接发现两个问题问题一:连接时System.err,报java.net.SocketException:Permission denied解决方法: 在AndroidManifest.xml文件中进行相关配置 <uses-permission android:name="android.permission.INTERNET" />问题二:在xml文件中配置完成之后再次连接,这时报了另一个异常,System.err java.net.ConnectException:localhost/127.0.0.1:8888-Connection refused解决方法: 将Socket中的本地地址改成10.0.2.2(原因是模拟器将127.0.0.1或localhost作为自己的地址了)