java 客户端与c++服务器端tcp通信 demo
2018-03-12 16:42
525 查看
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 <winsock2.h>
#include <process.h>
#pragma comment(lib, "ws2_32.lib")
#include <list>
std::list<SOCKET> 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<SOCKET>::iterator it = client_list.begin();
it != client_list.end();
it ++)
{
send(*it, szEcho, strlen(szEcho), 0);
}
}
}
通信结果显示,在eclipse里面
创建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 <winsock2.h>
#include <process.h>
#pragma comment(lib, "ws2_32.lib")
#include <list>
std::list<SOCKET> 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<SOCKET>::iterator it = client_list.begin();
it != client_list.end();
it ++)
{
send(*it, szEcho, strlen(szEcho), 0);
}
}
}
通信结果显示,在eclipse里面
相关文章推荐
- java 客户端与c++服务器端tcp通信 demo
- c++做服务器,java当客户端,采用 tcp协议之相互通信demo
- C++ 简单的 Tcp 实现[socket] 服务器端与客户端通信
- Java客户端与C++服务器端通信
- C++ 简单的 Tcp 实现[socket] 服务器端与客户端通信
- Java Client 与C++ Servertcp通信 demo
- Socket通信——C++服务器端和Java客户端
- C#基于TCP&UDP实现服务器与多个客户端之间的通信(客户端之间直接通信,不靠服务器端转发消息)
- android客户端与javaweb服务端通信——登录小demo的启示
- java使用UDP来进行客户端和服务器端通信的简单例子
- 简单用C#编写socket作为客户端与Linux下C++编写服务器端通信(未完善)
- Java_乔晓松_TCP客户端想服务器端上传照片和文本文件
- Java Socket TCP 通信,实现聊天室,服务器端指定客户端发送消息
- C++ 简单的 Tcp 实现[socket] 客户端与客户端通信
- Java编写一个简单的TCP通信程序。服务器发送一条字符串,客户端接收该信息并显示。
- C++ 简单的 Tcp 实现[socket] 客户端与客户端通信
- C++基于TCP/IP简单的客户端、服务器通信程序实例
- Java客户端 C++服务器端
- 基于TCP的客户端,服务器端上传文本文件的功能Demo
- java使用UDP来进行客户端和服务器端通信的简单例子