客户端和服务器程序中的连接拒绝错误

时间:2017-07-12 04:39:24

标签: c linux sockets

我有一个非常简单的public class MainActivity extends Activity { Random rn; AutoCompleteTextView searchBar; public static String urlGlobal; TextView con; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); searchBar=(AutoCompleteTextView) findViewById(R.id.autoCompleteTextView); Button button=(Button) findViewById(R.id.button); con=(TextView) findViewById(R.id.textView); rn= new Random(); final SharedPreferences perf= this.getSharedPreferences("com.karanvir.shareprefernces", Context.MODE_PRIVATE); //setting up an alert if(perf==null){ new AlertDialog.Builder(this) .setIcon(android.R.drawable.alert_dark_frame) .setTitle("How to use") .setMessage("Search what you want in the search bar! after we will choose a search engine our computer will recommend. After that you can change the search engine using the options menu in the right hand corner") //then need to set a onclick listener with our positive button .setPositiveButton("eng", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "its done", Toast.LENGTH_SHORT).show(); //where we would right our code where the user would confirm us to do perf.edit().putString("choiceOne","eng").apply(); } //25165012725 }) .setNegativeButton("fren", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { perf.edit().putString("choiceOne","fre").apply(); } }) .show(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings4) { Intent intentGoogle= new Intent(getApplicationContext(),Main2Activity.class); startActivity(intentGoogle); return true; } else if(id ==R.id.action_settings2){ Intent intentGoogle= new Intent(getApplicationContext(),Yahoo.class); startActivity(intentGoogle); return true; }else if (id==R.id.action_settings3){ Intent intentGoogle= new Intent(getApplicationContext(),MainActivity.class); startActivity(intentGoogle); return true; }else if(id==R.id.action_settings1){ new AlertDialog.Builder(getApplicationContext()) .setIcon(android.R.drawable.ic_dialog_info) .setTitle("About") .setMessage(".....") .show(); return true; } else if (id==R.id.action_settings5){ new AlertDialog.Builder(getApplicationContext()) .setIcon(android.R.drawable.ic_dialog_info) .setTitle("About") .setMessage("This app intercha") .show(); return true; } return super.onOptionsItemSelected(item); } public void jump(View view){ //intnet changing target of our code urlGlobal=searchBar.getText().toString(); Log.i("stuff",urlGlobal); int pageJump = rn.nextInt(3)+1; if (pageJump==1){ //google Intent intentGoogle= new Intent(getApplicationContext(),Main2Activity.class); startActivity(intentGoogle); } else if (pageJump==2){ //YAHOO Intent intentGoogle= new Intent(getApplicationContext(),Yahoo.class); startActivity(intentGoogle); } else if(pageJump==3){ //GOOGLE Intent intentGoogle= new Intent(getApplicationContext(),Main2Activity.class); startActivity(intentGoogle); } try { InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); } catch (Exception e) { // TODO: handle exception } } } client代码:

服务器

server

客户端:

#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

int main()
{
    int server_sockfd, client_sockfd;
    int server_len, client_len;
    struct sockaddr_in server_address;
    struct sockaddr_in client_address;

    server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
    server_address.sin_family = AF_INET;
    server_address.sin_addr.s_addr = htonl(INADDR_ANY);
    server_address.sin_port = htons(9734);
    server_len = sizeof(server_address);

    bind(server_sockfd, (struct sockaddr *)&server_address, server_len);
    listen(server_sockfd, 5);

    while ( 1 )
    {
        char ch;
        printf("server waiting\n");
        client_len = sizeof(client_address);
        client_sockfd = accept(server_sockfd, (struct sockaddr *)&client_address, &client_len);
        read(client_sockfd, &ch, 1);
        ch += 4;
        write(client_sockfd, &ch, 1);
        close(client_sockfd);
    }
}

考虑我已在机器#include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> int main(int argc, char *argv[]) { int sockfd; int len; struct sockaddr_in address; int result; char ch = 'P'; sockfd = socket(AF_INET, SOCK_STREAM, 0); address.sin_family = AF_INET; address.sin_addr.s_addr = inet_addr(argv[1]); address.sin_port = htons(9734); len = sizeof(address); result = connect(sockfd, (struct sockaddr *)&address, len); if(result == −1) { perror("oops: client1"); return 1; } write(sockfd, &ch, 1); read(sockfd, &ch, 1); printf("char from server = %c\n", ch); close(sockfd); return 0; } 中执行server代码,当我尝试在机器X中执行A(10.18.17.26)时,我收到此错误:

client

但是我能够从机器X $ ./client 10.18.17.26 oops: client1: Connection refused 机器A,反之亦然。计算机pingA已在X网络中连接。

但是,如果我在机器intranet的对等服务器上运行client代码,它可以正常工作并生成此输出:

A

希望我能在这里找到解决方案来解决这个问题。提前谢谢!

0 个答案:

没有答案