java tcp demo_java 客户端与c++服务器端tcp通信 demo | 学步园

  • Post author:
  • Post category:java


java 客户端代码

创建socket

绑定

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.InetSocketAddress;

import java.net.Socket;

public class JavaClient {

public static void main(String [] args) throws InterruptedException, IOException

{

InetSocketAddress addr = new InetSocketAddress(“127.0.0.1”, 5678); //创建socket

Socket sock = new Socket();

sock.connect(addr);//连接服务器

BufferedReader is = null;

PrintWriter os = null;

os = new PrintWriter(sock.getOutputStream()); //管道的写工具

is = new BufferedReader(new InputStreamReader(sock.getInputStream())); //管道的读工具

BufferedReader user = new BufferedReader(new InputStreamReader(System.in)); //从控制台读取命令的工具

System.out.print(“client say:”);

String msg = user.readLine();

while(!msg .equals(“bye”))

{

os.println(msg);

os.flush();

String echo = is.readLine();

System.out.println(echo);

System.out.print(“client say:”);

msg = user.readLine();

}

os.close();

is.close();

sock.close();

}

}

c++服务器端 ,之前的文章写过的,现在拷贝过来的

创建socket

绑定端口

监听端口

// ConsoleServer.cpp : 定义控制台应用程序的入口点。

//

#include

#include

#pragma comment(lib, “ws2_32.lib”)

#include

std::list client_list;

void thread_client(void * );

int main(int argc, char * argv[])

{

WSADATA wsadata;

WSAStartup(0x22, &wsadata);

unsigned short sPort = argc>1 ? atoi(argv[1]) : 5678;

int sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

if (sockfd == INVALID_SOCKET)

{

printf(“fail to create socket.\n”);

return 1;

}

sockaddr_in saddr;

saddr.sin_addr.s_addr = ADDR_ANY;

saddr.sin_port = htons(sPort);

saddr.sin_family = AF_INET;

if(bind(sockfd, (const sockaddr *)(&saddr), sizeof(saddr)))

{

printf(“fail to bind, errno: %d.\n”, GetLastError());

DWORD dw = WSAGetLastError();

return 2;

}

if (listen(sockfd, 5))

{

printf(“fail to listen.\n”);

return 3;

}

printf(“Server is listening at [%d].\n”

“Wating for client to connect…\n”

, sPort);

for (;;)

{

sockaddr_in caddr;

int caddr_len = sizeof(caddr);

int client = accept(sockfd, (sockaddr *)&caddr, &caddr_len);

unsigned char * pAddr = (unsigned char *)&caddr.sin_addr.s_addr;

printf(“[%d.%d.%d.%d : %d] coming.\n”, pAddr[0], pAddr[1], pAddr[2], pAddr[3], ntohs(caddr.sin_port));

_beginthread(thread_client, 0, (void *)client);

client_list.push_back(client);

}

return 0;

}

void thread_client(void * args)

{

SOCKET client = (int)args;

sockaddr_in caddr;

int caddr_len = sizeof(caddr);

getpeername(client, (sockaddr *)&caddr, &caddr_len);

unsigned char * pAddr = (unsigned char *)&caddr.sin_addr.s_addr;

unsigned short usPort = ntohs(caddr.sin_port);

for (;;)

{

char szMsg [0x1000] = “”;

if (0 >= recv(client, szMsg, sizeof(szMsg)-1, 0))

break;

char szEcho [0x1000] = “”;

sprintf(szEcho, “Server Say: [%d.%d.%d.%d:%d] %s”

, pAddr[0], pAddr[1], pAddr[2], pAddr[3]

, usPort

, szMsg);

for (std::list::iterator it = client_list.begin();

it != client_list.end();

it ++)

{

send(*it, szEcho, strlen(szEcho), 0);

}

}

}

通信结果显示,在eclipse里面

1343054389_9159.jpg



版权声明:本文为weixin_31414515原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。