请教,java写的服务器代码,安卓写客户端,无法互传数据

代码运行异常 2014-10-16 03:17:18
这几天看韩顺平老师的视频,讲到数据互传,照着他的视频敲了两个类,分别是客户端和服务端,在eclipse上跑没问题。上午想到自己在安卓上写客户端,通过安卓模拟器去向此服务器发送和接收信息。可是没有成功。所以来发个问题来请教是怎么回事?
首先是java写的服务端,这是按照韩顺平老师的视频写的,思路开启某个端口,等待客户端的连接,并获取发送过来的消息之后再手工回复一条消息给连接的客户端:
public class LyServerconnect
{
public LyServerconnect()
{
int myport = 3**1;// 定义一个ServerSocket监听在端口****上
try
{
ServerSocket ssk = new ServerSocket(myport);
System.out.println("服务端开始监听****号端口...");
//等待连接
Socket saccept = ssk.accept();
//先接收客户端发来的信息
InputStreamReader svreader = new InputStreamReader(saccept.getInputStream());
BufferedReader sbreader = new BufferedReader(svreader);
//回应一条消息
PrintWriter spw = new PrintWriter(saccept.getOutputStream(), true);
//接收从控制台输入的信息
InputStreamReader sinput = new InputStreamReader(System.in);
BufferedReader binput = new BufferedReader(sinput);
while(true)
{
String infoClient = sbreader.readLine();
System.out.println("服务器接收到客户端的数据:" + infoClient);
//判断客户端返回消息是否是"byes",是就关闭连接
if("byes".equals(infoClient))
{
System.out.println("系统退出,对话结束。");
ssk.close();
break;
}
//接收从控制台输入的信息
System.out.println("输入服务端返回到客户端的信息...");
String replys = binput.readLine();
//把从控制台接收的信息,回送给客户端
spw.println("" + replys);
}
} catch (IOException e)
{
e.printStackTrace();
}
}
public static void main(String[] args) {
LyServerconnect lys = new LyServerconnect();
}
}
然后安卓写的客户端,客户端控件有:一个listview来显示客户端与服务互传的消息,一个edittext控件来输入内容,一个发送按钮。已经添加如下权限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
以下为代码:
public class MainActivity extends Activity implements OnClickListener
{
private ListView talkList;
private EditText editTalk;
private int port = 3691; // 要连接的服务端对应的监听端口
private Socket cltsk;//连接服务器的端口
private PrintWriter cpw;//发送输入文字的流
private InputStreamReader cget;//服务器返回数据的流
private BufferedReader getread;//读取服务器返回数据的流
private ArrayList<String> talkArrays = new ArrayList<String>();//保存消息的容器
private TalkAdapter tadapter;

@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.maintalk);
talkList = (ListView) findViewById(R.id.listTalk);
editTalk = (EditText) findViewById(R.id.edTalk);
findViewById(R.id.btnTalk).setOnClickListener(this);
tadapter = new TalkAdapter();
talkList.setAdapter(tadapter);
}

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

@Override
public void onClick(View v)
{
switch(v.getId())
{
case R.id.btnTalk:
talktoServer();
break;
}
}
/**向服务器发送消息*/
private void talktoServer()
{

String strTalks = editTalk.getText().toString().trim();
if(strTalks.length() < 0)
{
return;
}
try
{
String hostAddress = InetAddress.getLocalHost().getHostAddress();
cltsk = new Socket("27.154.217.42", port);
cpw = new PrintWriter(cltsk.getOutputStream(), true);
cget = new InputStreamReader(cltsk.getInputStream());
getread = new BufferedReader(cget);
while(true)
{
cpw.println(strTalks);
talkArrays.add(strTalks);
tadapter.notifyDataSetChanged();
if("byes".equals(strTalks))
{
Toast.makeText(MainActivity.this, "系统退出,对话结束。", Toast.LENGTH_LONG).show();
cltsk.close();
break;
}
String getserver = getread.readLine();
talkArrays.add(getserver);
tadapter.notifyDataSetChanged();
}
}
catch (Exception e)
{
e.printStackTrace();
}
}

private class TalkAdapter extends BaseAdapter
{
@Override
public View getView(int arg0, View arg1, ViewGroup arg2)
{
View tkLayout = getLayoutInflater().inflate(R.layout.talk_item, null);
TextView itText = (TextView) tkLayout.findViewById(R.id.item_text);
String currs = talkArrays.get(arg0);
itText.setText(currs);
return tkLayout;
}
@Override
public int getCount()
{
return talkArrays.size();
}
@Override
public Object getItem(int arg0)
{
return null;
}
@Override
public long getItemId(int arg0)
{
return 0;
}
}
}
但是,这样开启服务器后,服务器监听端口,安卓客户端却连接不上服务器,自然也就无法发送消息到服务器里。
所以我来请教一下,要如何修改,才能成功使安卓客户端和服务端对接,并可互传消息?
...全文
214 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
代码运行异常 2014-10-16
  • 打赏
  • 举报
回复
引用 1 楼 csdn_02 的回复:
安卓虚拟机通过 10.0.0.2 访问
谢谢你的回复,但我用的是Genymotion这个模拟器去跑安卓项目,而且我按照你给的ip,尝试了也没效果。
csdn_02 2014-10-16
  • 打赏
  • 举报
回复
安卓虚拟机通过 10.0.0.2 访问

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧