tcp android客户端服务器c linux虚拟机
嗨,谢谢你阅读我的问题。我正在实现一个简单的android应用程序,以便与linux虚拟机上用c编写的服务器通信。 我的问题是,连接没有发生,服务器仍处于侦听状态,套接字已创建并绑定,但找不到设备 java代码tcp android客户端服务器c linux虚拟机,android,c,linux,server,tcpclient,Android,C,Linux,Server,Tcpclient,嗨,谢谢你阅读我的问题。我正在实现一个简单的android应用程序,以便与linux虚拟机上用c编写的服务器通信。 我的问题是,连接没有发生,服务器仍处于侦听状态,套接字已创建并绑定,但找不到设备 java代码 import android.util.Log; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputS
import android.util.Log;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
public class TCPClient {
private String serverMessage;
/**
* Specify the Server Ip Address here. Whereas our Socket Server is started.
*/
public String serverIp; // your computer IP address
public static final int SERVERPORT = 7755;
private OnMessageReceived mMessageListener;
private boolean mRun = false;
private PrintWriter out = null;
private BufferedReader in = null;
/**
* Constructor of the class. OnMessagedReceived listens for the messages received from server
*/
public TCPClient(final OnMessageReceived listener, String ipAddressOfServerDevice) {
mMessageListener = listener;
serverIp = ipAddressOfServerDevice;
}
/**
* Sends the message entered by client to the server
*
* @param message text entered by client
*/
public void sendMessage(String message) {
if (out != null && !out.checkError()) {
System.out.println("message: " + message);
out.println(message);
out.flush();
}
}
public void stopClient() {
mRun = false;
}
public void run() {
mRun = true;
try {
//here you must put your computer's IP address.
InetAddress serverAddr = InetAddress.getByName(serverIp);
Log.e("TCP SI Client", "SI: Connecting...");
//create a socket to make the connection with the server
try (Socket socket = new Socket(serverAddr, SERVERPORT)) {
//send the message to the server
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
Log.e("TCP SI Client", "SI: Sent.");
Log.e("TCP SI Client", "SI: Done.");
//receive the message which the server sends back
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//in this while the client listens for the messages sent by the server
while (mRun) {
serverMessage = in.readLine();
if (serverMessage != null && mMessageListener != null) {
//call the method messageReceived from MyActivity class
mMessageListener.messageReceived(serverMessage);
Log.e("RESPONSE FROM SERVER", "S: Received Message: '" + serverMessage + "'");
}
serverMessage = null;
}
} catch (Exception e) {
Log.e("TCP SI Error", "SI: Error", e);
e.printStackTrace();
}
//the socket must be closed. It is not possible to reconnect to this socket
// after it is closed, which means a new socket instance has to be created.
} catch (Exception e) {
Log.e("TCP SI Error", "SI: Error", e);
}
}
//Declare the interface. The method messageReceived(String message) will must be implemented in the MyActivity
//class at on asynckTask doInBackground
public interface OnMessageReceived {
void messageReceived(String message);
}
}
#include<stdio.h>
#include<netinet/in.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netdb.h>
#include<stdlib.h>
#include<string.h>
#define MAX 80
#define PORT 7755
#define SA struct sockaddr
void func(int sockfd)
{
char buff[MAX];
int n;
for(;;)
{
bzero(buff,MAX);
read(sockfd,buff,sizeof(buff));
printf("From client: %s\t To client : ",buff);
bzero(buff,MAX);
n=0;
while((buff[n++]=getchar())!='\n');
write(sockfd,buff,sizeof(buff));
if(strncmp("exit",buff,4)==0)
{
printf("Server Exit...\n");
break;
}
}
}
int main()
{
int sockfd,connfd,len;
struct sockaddr_in servaddr,cli;
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd==-1)
{
printf("socket creation failed...\n");
exit(0);
}
else
printf("Socket successfully created..\n");
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(PORT);
if((bind(sockfd,(SA*)&servaddr, sizeof(servaddr)))!=0)
{
printf("socket bind failed...\n");
exit(0);
}
else
printf("Socket successfully binded..\n");
if((listen(sockfd,5))!=0)
{
printf("Listen failed...\n");
exit(0);
}
else
printf("Server listening..\n");
len=sizeof(cli);
connfd=accept(sockfd,(SA *)&cli,&len);
if(connfd<0)
{
printf("server acccept failed...\n");
exit(0);
}
else
printf("server acccept the client...\n");
func(connfd);
close(sockfd);
}
Serverip包含虚拟机上的服务器的地址,我从命令ipconfig获得它,用户通过简单的editText输入,然后转到另一个屏幕,在那里可以向服务器发送消息
服务器端
import android.util.Log;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
public class TCPClient {
private String serverMessage;
/**
* Specify the Server Ip Address here. Whereas our Socket Server is started.
*/
public String serverIp; // your computer IP address
public static final int SERVERPORT = 7755;
private OnMessageReceived mMessageListener;
private boolean mRun = false;
private PrintWriter out = null;
private BufferedReader in = null;
/**
* Constructor of the class. OnMessagedReceived listens for the messages received from server
*/
public TCPClient(final OnMessageReceived listener, String ipAddressOfServerDevice) {
mMessageListener = listener;
serverIp = ipAddressOfServerDevice;
}
/**
* Sends the message entered by client to the server
*
* @param message text entered by client
*/
public void sendMessage(String message) {
if (out != null && !out.checkError()) {
System.out.println("message: " + message);
out.println(message);
out.flush();
}
}
public void stopClient() {
mRun = false;
}
public void run() {
mRun = true;
try {
//here you must put your computer's IP address.
InetAddress serverAddr = InetAddress.getByName(serverIp);
Log.e("TCP SI Client", "SI: Connecting...");
//create a socket to make the connection with the server
try (Socket socket = new Socket(serverAddr, SERVERPORT)) {
//send the message to the server
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
Log.e("TCP SI Client", "SI: Sent.");
Log.e("TCP SI Client", "SI: Done.");
//receive the message which the server sends back
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//in this while the client listens for the messages sent by the server
while (mRun) {
serverMessage = in.readLine();
if (serverMessage != null && mMessageListener != null) {
//call the method messageReceived from MyActivity class
mMessageListener.messageReceived(serverMessage);
Log.e("RESPONSE FROM SERVER", "S: Received Message: '" + serverMessage + "'");
}
serverMessage = null;
}
} catch (Exception e) {
Log.e("TCP SI Error", "SI: Error", e);
e.printStackTrace();
}
//the socket must be closed. It is not possible to reconnect to this socket
// after it is closed, which means a new socket instance has to be created.
} catch (Exception e) {
Log.e("TCP SI Error", "SI: Error", e);
}
}
//Declare the interface. The method messageReceived(String message) will must be implemented in the MyActivity
//class at on asynckTask doInBackground
public interface OnMessageReceived {
void messageReceived(String message);
}
}
#include<stdio.h>
#include<netinet/in.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netdb.h>
#include<stdlib.h>
#include<string.h>
#define MAX 80
#define PORT 7755
#define SA struct sockaddr
void func(int sockfd)
{
char buff[MAX];
int n;
for(;;)
{
bzero(buff,MAX);
read(sockfd,buff,sizeof(buff));
printf("From client: %s\t To client : ",buff);
bzero(buff,MAX);
n=0;
while((buff[n++]=getchar())!='\n');
write(sockfd,buff,sizeof(buff));
if(strncmp("exit",buff,4)==0)
{
printf("Server Exit...\n");
break;
}
}
}
int main()
{
int sockfd,connfd,len;
struct sockaddr_in servaddr,cli;
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd==-1)
{
printf("socket creation failed...\n");
exit(0);
}
else
printf("Socket successfully created..\n");
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(PORT);
if((bind(sockfd,(SA*)&servaddr, sizeof(servaddr)))!=0)
{
printf("socket bind failed...\n");
exit(0);
}
else
printf("Socket successfully binded..\n");
if((listen(sockfd,5))!=0)
{
printf("Listen failed...\n");
exit(0);
}
else
printf("Server listening..\n");
len=sizeof(cli);
connfd=accept(sockfd,(SA *)&cli,&len);
if(connfd<0)
{
printf("server acccept failed...\n");
exit(0);
}
else
printf("server acccept the client...\n");
func(connfd);
close(sockfd);
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#定义最大值80
#定义端口7755
#定义SA结构sockaddr
无效函数(int-sockfd)
{
字符buff[MAX];
int n;
对于(;;)
{
bzero(buff,MAX);
读取(sockfd、buff、sizeof(buff));
printf(“从客户端:%s\t到客户端:”,buff);
bzero(buff,MAX);
n=0;
而((buff[n++]=getchar())!='\n');
写入(sockfd、buff、sizeof(buff));
如果(strncmp(“退出”,buff,4)==0)
{
printf(“服务器退出…\n”);
打破
}
}
}
int main()
{
int sockfd、connfd、len;
servaddr中的struct sockaddru,cli;
sockfd=套接字(AF_INET,SOCK_STREAM,0);
如果(sockfd==-1)
{
printf(“套接字创建失败…\n”);
出口(0);
}
其他的
printf(“套接字已成功创建..\n”);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin\u addr.s\u addr=htonl(INADDR\u ANY);
servaddr.sinu port=htons(端口);
if((bind(sockfd,(SA*)&servaddr,sizeof(servaddr)))!=0)
{
printf(“套接字绑定失败…\n”);
出口(0);
}
其他的
printf(“套接字成功绑定..\n”);
如果((听(sockfd,5))!=0)
{
printf(“侦听失败…\n”);
出口(0);
}
其他的
printf(“服务器侦听..\n”);
len=sizeof(cli);
connfd=accept(sockfd,(SA*)&cli和len);
如果(connfd无法连接到/127.0.0.1
嗯..你在做什么?这不匹配//这里你必须输入你的计算机的IP地址。
我从命令ipconfig获得它,并由用户通过简单的编辑文本输入。
你输入了127.0.0.1吗?我的服务器写在虚拟机上,我必须启用它移植解决了我的问题