Android应用程序使用的Socket来发送和接收消息: [英] Android application using Socket to send and receive messages:
问题描述
我有我尝试使用使用套接字连接来发送和接收消息的服务器的Android应用程序。
我曾经有过发送和接收的问题,所有的方式。我已经能够做一个或另一个,在任何时候两者。
我在想,如果有人可以帮助我用一个简单的运动,我可以使用的BufferedReader
和的PrintWriter
编译就这么做。
我AP preciate任何帮助,因为我在放弃的地步。
在此先感谢....下面是什么,我已经尝试了几枪(尽管它们是不相关的这个问题,我希望它表明我问这里以前都试过)。
私人OnClickListener sendClickListener =新OnClickListener(){
公共无效的onClick(查看为arg0){
螺纹cThread =新主题(新ClientThread());
cThread.start();
}};
公共类ClientThread实现Runnable {
公共无效的run(){
尝试 {
EditText上dstAddress =(EditText上)findViewById(R.id.destinationAddress);
EditText上dstMessage =(EditText上)findViewById(R.id.messageToTranslate);
EditText上dstPort =(EditText上)findViewById(R.id.destinationPort);
。字符串地址= dstAddress.getText()的toString();
字符串消息= dstMessage.getText()的toString()。
INT端口=的Integer.parseInt(dstPort.getText()的toString());
InetAddress类serverAddr = InetAddress.getByName(地址);
Log.d(课程作业,C:连接...);
Socket套接字=新的Socket(serverAddr,口);
连接=真正的;
而(已连接){
尝试 {
EditText上dstTranslation =(EditText上)findViewById(R.id.returnedTranslation);
dstTranslation.setText(帮我);
Log.d(课程作业,C:发送命令。);
PrintWriter的了;
OUT =的新PrintWriter(新的BufferedWriter(新OutputStreamWriter(socket.getOutputStream())),TRUE);
通过out.println(语言);
通过out.println(消息);
Log.d(ClientActivity,C:发送。);
// BufferedReader类的;
//在=新的BufferedReader(新的InputStreamReader(socket.getInputStream()));
//字符串翻译= in.readLine();
}赶上(例外五){
Log.e(ClientActivity,S:错误,E);
}
}
socket.close();
Log.d(ClientActivity,C:关闭。);
}赶上(例外五){
Log.e(ClientActivity,C:错误,E);
连接= FALSE;
}
}
公共类ClientConnection {
字符串的地址,语言,信息;
INT端口号;
插座ClientSocket的= NULL;
公共ClientConnection(LAN字符串,字符串MES,字符串添加,INT PN)抛出IOException异常{
地址=增加;
端口号= PN;
语言=兰;
消息= MES;
}
公共字符串createAndSend()抛出IOException异常{
//创建并连接套接字
插座ClientSocket的= NULL;
ClientSocket的=新的Socket(地址,端口号);
PrintWriter的PW =的新PrintWriter(clientSocket.getOutputStream(),TRUE);
的BufferedReader BR =新的BufferedReader(新的InputStreamReader(clientSocket.getInputStream()));
//发送第一个消息 - 消息被正确接收
pw.write(语言+\ N);
pw.flush();
//发送断数据
//发送第二条消息 - 消息被正确接收
pw.write(信息+\ N);
pw.flush();
pw.close();
//发送断数据
//注:无论是我无法接收消息正确与否,我不从服务器发送得当。
串translatedMessage = br.readLine();
System.out.print(translatedMessage);
br.close();
//Log.d("application_name",translatedMessage);试图检查内容开始从服务器返回。
返回说什么?;
}
进口java.io.BufferedOutputStream;
进口java.io.BufferedReader中;
进口java.io.IOException异常;
进口java.io.InputStreamReader中;
进口的java.io.PrintWriter;
进口java.net.ServerSocket的;
进口的java.net.Socket;
公共类ServerConnection {
公共静态无效的主要(字串[] args)抛出异常{
//删除 - 使用while循环来保持连接打开永久。
布尔值状态= FALSE;
而(!状态){
ServerSocket的ServerSocket的= NULL;
尝试 {
ServerSocket的=新的ServerSocket(4444);
}赶上(IOException异常E){
通信System.err.println(无法监听端口:4444);
System.exit(1);
}
插座ClientSocket的= NULL;
尝试 {
ClientSocket的=的ServerSocket.accept();
}赶上(IOException异常E){
通信System.err.println(接受失败。);
System.exit(1);
}
//删除 - 作为工作在这里,连接建立和程序运行在4444等待连接
的BufferedReader BR =新的BufferedReader(新的InputStreamReader(clientSocket.getInputStream()));
String语言= br.readLine();
字符串消息= br.readLine();
//测试 - 工程
的System.out.println(语言);
//测试 - 工程
的System.out.println(消息);
//删除 - 作为工作在这里,无论是消息传递和应用。从客户端发送的消息被接收。
的TranslateMessage TM =新的TranslateMessage();
字符串translatedMessage = tm.translateMessage(语言,消息);
//注:这似乎是我要去的地方错了,要么我不发送消息正确与否我不能正确接受它..
// PrintWriter的作家=的新PrintWriter(新的BufferedOutputStream(clientSocket.getOutputStream()));
PrintWriter的PW =的新PrintWriter(clientSocket.getOutputStream(),TRUE);
//发送翻译回
的System.out.println(translatedMessage);
pw.write(translatedMessage +\ N);
pw.write(回归测试的\ n); //测试消息!
pw.flush();
//发送断数据
pw.close();
br.close();
clientSocket.close();
serverSocket.close();
}
}
}
我只是忘了关闭在客户端的socket连接。因此,虽然我怀疑什么,我所做的是一个标准答案,以我自己的问题是作品包括
I have an android application that I am attempting to use to send and receive messages to a server using socket connection.
I have had all manner of problems sending and receiving. I have been able to do one or the other, at no point both.
I was wondering if someone could help me with a simple exercise that I can compile using BufferedReader
and PrintWriter
to do so.
I appreciate any help as I am at the point of giving up.
Thanks in advance.... Below are a few shots of what I have tried (Though they are irrelevant to this question, I hope it shows that I have tried before asking here).
private OnClickListener sendClickListener = new OnClickListener(){
public void onClick(View arg0) {
Thread cThread = new Thread(new ClientThread());
cThread.start();
}};
public class ClientThread implements Runnable {
public void run() {
try {
EditText dstAddress = (EditText) findViewById(R.id.destinationAddress);
EditText dstMessage = (EditText) findViewById(R.id.messageToTranslate);
EditText dstPort = (EditText) findViewById(R.id.destinationPort);
String address = dstAddress.getText().toString();
String message = dstMessage.getText().toString();
int port = Integer.parseInt(dstPort.getText().toString());
InetAddress serverAddr = InetAddress.getByName(address);
Log.d(".Coursework", "C: Connecting...");
Socket socket = new Socket(serverAddr, port);
connected = true;
while (connected) {
try {
EditText dstTranslation = (EditText) findViewById(R.id.returnedTranslation);
dstTranslation.setText("help me");
Log.d(".Coursework", "C: Sending command.");
PrintWriter out;
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
out.println(language);
out.println(message);
Log.d("ClientActivity", "C: Sent.");
//BufferedReader in;
//in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//String translation = in.readLine();
} catch (Exception e) {
Log.e("ClientActivity", "S: Error", e);
}
}
socket.close();
Log.d("ClientActivity", "C: Closed.");
} catch (Exception e) {
Log.e("ClientActivity", "C: Error", e);
connected = false;
}
}
public class ClientConnection {
String address, language, message;
int portNumber;
Socket clientSocket = null;
public ClientConnection(String lan, String mes, String add, int pn) throws IOException{
address = add;
portNumber = pn;
language = lan;
message = mes;
}
public String createAndSend() throws IOException{
// Create and connect the socket
Socket clientSocket = null;
clientSocket = new Socket(address, portNumber);
PrintWriter pw = new PrintWriter(clientSocket.getOutputStream(),true);
BufferedReader br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
// Send first message - Message is being correctly received
pw.write(language+"\n");
pw.flush();
// Send off the data
// Send the second message - Message is being correctly received
pw.write(message+"\n");
pw.flush();
pw.close();
// Send off the data
// NOTE: Either I am not receiving the message correctly or I am not sending it from the server properly.
String translatedMessage = br.readLine();
System.out.print(translatedMessage);
br.close();
//Log.d("application_name",translatedMessage); Trying to check the contents begin returned from the server.
return "Say What??";
}
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerConnection {
public static void main(String[] args) throws Exception {
// Delete - Using while loop to keep connection open permanently.
boolean status = false;
while( !status){
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(4444);
} catch (IOException e) {
System.err.println("Could not listen on port: 4444.");
System.exit(1);
}
Socket clientSocket = null;
try {
clientSocket = serverSocket.accept();
} catch (IOException e) {
System.err.println("Accept failed.");
System.exit(1);
}
// Delete - Working as of here, connection is established and program runs awaiting connection on 4444
BufferedReader br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String language = br.readLine();
String message = br.readLine();
// Test - Works
System.out.println(language);
// Test - Works
System.out.println(message);
// Delete - Working as of here, both messages are passed and applied. Messages are received as sent from client.
TranslateMessage tm = new TranslateMessage();
String translatedMessage = tm.translateMessage(language, message);
// NOTE: This seems to be where I am going wrong, either I am not sending the message correctly or I am not receiving it correctly..
// PrintWriter writer = new PrintWriter(new BufferedOutputStream(clientSocket.getOutputStream()));
PrintWriter pw = new PrintWriter(clientSocket.getOutputStream(),true);
// Send translation back
System.out.println(translatedMessage);
pw.write(translatedMessage+"\n");
pw.write("Return test \n"); // Test message!
pw.flush();
// Send off the data
pw.close();
br.close();
clientSocket.close();
serverSocket.close();
}
}
}
I simply neglected to close the socket connection on the client side. So whilst I doubt what I have done is a model answer to my own question it works of included.
这篇关于Android应用程序使用的Socket来发送和接收消息:的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!