我正在创建一个简单的Knock Knock应用程序(套接字编程),其中有一个localhost服务器,并且有一个客户端.程序很简单,服务器会告诉敲敲笑话,这是它应该如何去,
Server: Knock Knock
Client: Who's there?
Server: Turnip.
Client: Turnip Who?
Server: Turnip the heat.
Run Code Online (Sandbox Code Playgroud)
这就是程序应该如何进行的.但事情是我的GUI没有显示任何消息.在我的文本区域.这是我的代码.
服务器:
import java.net.*;
import java.io.*;
public class KnockKnockServer {
public static void main(String[] args) throws IOException {
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);
}
PrintWriter out = new …Run Code Online (Sandbox Code Playgroud) 嘿社区我有以下ServerSocket应该监听端口53000并记录任何收到的数据.但是,我似乎无法通过server.accept()阻塞调用.
public void run() {
SocketServer server = new ServerSocket(53000);
//---buffer store for the stream---
byte[] buffer = new byte[1024];
//---bytes returned from read()---
int bytes;
//---keep listening to the InputStream until an
// exception occurs---
while (true) {
try {
socket = server.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String str = in.readLine();
Log.i("received response from server", str);
in.close();
socket.close();
} catch (IOException e) {
Log.e(TAG, e.getMessage());
} catch (Exception e){
server.close();
Log.e(TAG, e.getMessage());
}
}
}
Run Code Online (Sandbox Code Playgroud)
我还在Manifest文件中为应用程序提供了INTERNET权限.()
为了增加这个谜团,我还验证了客户端响应被发送到该端口. …
下面的代码在Qt C++中有C和TCP服务器中的TCP客户端.我的问题是我使用TCP来提高可靠性,但它有数据丢失(而不是数据包).在我的主代码中,如果我运行tcp客户端来发送数据,TCP服务器只接收一个数据包.如果我sleep(1);在每个数据包传输之间添加到客户端,则TCP服务器接收数据.客户端和服务器都在同一台计算机上运行.
为了简化问题并且不能在这里放置太大的代码,我有以下代码执行得更快,但它丢失了数据包的最后10-15个字节.
TCP C客户端
main.c中
#include "socket_handler.h" //I didn't put the all includes here
#define PORT 22208
//tcp server
int main(void)
{
int sockfd;
uint32_t senderAddress = 2130706433; //127.0.0.1
if( connect_to_server_w_uint( &sockfd, senderAddress, PORT ) < 0 ){
printf("error at line 454\n");
exit(1);
}
char data[] = "124b00068c158f$321$52712304$13.212779$0$O$0$0$b4$1$0$3$0$0$0$0$11$0$7$0$1$fe$f1$aaa9fffffffffd80$2132b00$eb460b5e$1$1$2016-02-22 03:01:00$0000-00-00 00:00:00$321$24754$321$13132$1$98$0$5.1$0$3c$64$1$96$4d$3e8$38$2$46$dc$4$3$f6$e6$17$0$e6$d3$1$0$e6$d3$2$0£";
char buffer[512];
int i=0;
for(i=0; i<1000; i++){
bzero(buffer, 512);
sprintf(buffer, "%d***%s -----",i,data);
send_data_to_server(&sockfd, buffer, strlen(data) +1 );
printf("[%d]: data is sent\n", i);
}
close_connection(&sockfd);
return 0;
} …Run Code Online (Sandbox Code Playgroud) 我很困惑和搜索,但无法找到我的问题的答案,帮助我....
ServerSocket s= new ServerSocket(port);
Run Code Online (Sandbox Code Playgroud)
这个端口号来自哪里?即使我使用4位或5位数字中的任何一个数字,它仍然可以完美地运行,但为什么以及如何?例如,端口号可以是任何5009,12221,6785等,但为什么呢?谁决定它应该是多少?
我正在写一个服务器 - 客户端聊天程序.
这是我的代码
服务器:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class HelloServer {
public final static int defaultPort = 2345;
public static void main(String[] args) {
int port = defaultPort;
try {
port = Integer.parseInt(args[0]);
} catch (Exception e) {
}
if (port <= 0 || port >= 65536) {
port = defaultPort;
}
try {
ServerSocket ss = new ServerSocket(port);
while (true) {
try {
Socket s = ss.accept();
String response = "Hello …Run Code Online (Sandbox Code Playgroud) 在这里我放了一些代码,连接建立,但是每当客户端想要将一些数据发送到服务器数据时,如果客户端在到达服务器后立即解除连接数据如何解决该问题.
我想要的是:如果建立连接并且连接不紧密.
public class Server extends AppCompatActivity {
private ServerSocket serverSocket;
Handler UIHandler;
Thread Thread1 = null;
EditText edText;
public static final int SERVERPORT = 3000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_server);
getSupportActionBar().setTitle("Server");
edText = (EditText) findViewById(R.id.editText);
UIHandler = new Handler();
this.Thread1 = new Thread(new Thread1());
this.Thread1.start();
}
class Thread1 implements Runnable {
InetAddress addr;
@Override
public void run() {
Socket socket = null;
try {
addr = InetAddress.getByName(getLocalIpAddress());
serverSocket = new ServerSocket(SERVERPORT);
} catch (IOException e) { …Run Code Online (Sandbox Code Playgroud) 一旦服务器决定接受客户端的连接,任何人都可以告诉我如何设置客户端端口号。我希望客户端的端口号应该在 50000 到 60000 之间。