1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
//
// 引入头文件
#include "ODSocket/ODSocket.h"
// Socker连接
void
HelloWorld::connectServer()
{
// 初始化
// ODSocket socket;
socket.Init();
socket.Create(AF_INET, SOCK_STREAM, 0);
// 设置服务器的IP地址,端口号
// 并连接服务器 Connect
const
char
* ip =
"127.0.0.1"
;
int
port = 12345;
bool
result = socket.Connect(ip, port);
// 发送数据 Send
socket.Send(
"login"
, 5);
if
(result) {
CCLOG(
"connect to server success!"
);
// 开启新线程,在子线程中,接收数据
std::
thread
recvThread = std::
thread
(&HelloWorld::receiveData,
this
);
recvThread.detach();
// 从主线程分离
}
else
{
CCLOG(
"can not connect to server"
);
return
;
}
}
// 接收数据
void
HelloWorld::receiveData()
{
// 因为是强联网
// 所以可以一直检测服务端是否有数据传来
while
(
true
) {
// 接收数据 Recv
char
data[512] =
""
;
int
result = socket.Recv(data, 512, 0);
printf
(
"%d"
, result);
// 与服务器的连接断开了
if
(result <= 0)
break
;
CCLOG(
"%s"
, data);
}
// 关闭连接
socket.Close();
}
//
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
//
public
class
Server {
public
static
void
main(String[] args)
throws
IOException {
// 创建ServerSocket,监听端口号:12345
ServerSocket ss =
new
ServerSocket(
12345
);
// 创建用于管理客户端的收发数据的子线程类
ClientThread clientThread =
new
ClientThread();
clientThread.start();
System.out.println(
"服务器开启啦"
);
// 监听端口号:12345
// 等待客户连接 accept()
while
(
true
) {
// 开始接收客户端的连接
Socket socket = ss.accept();
System.out.println(
"有新客户连接~"
);
clientThread.addClient(socket);
}
}
}
//
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
//
// 继承Thread线程类
public
class
ClientThread
extends
Thread {
// 客户端连接的socket列表
private
ArrayList
new
ArrayList
// 添加客户
public
void
addClient(Socket socket) {
clients.add(socket);
}
// 删除客户
public
void
removeClient(Socket socket) {
clients.remove(socket);
}
// 向客户发送数据
public
void
sendMessage(Socket socket, String data)
throws
IOException {
// 给玩家发送数据
OutputStream os = socket.getOutputStream();
os.write(data.getBytes(
"UTF-8"
));
}
@Override
public
void
run() {
while
(
true
) {
try
{
for
(Socket socket : clients) {
// 获取客户端发来的数据
InputStream is = socket.getInputStream();
int
len = is.available() +
1
;
byte
[] buff =
new
byte
[len];
int
flag = is.read(buff);
// read()返回-1,说明客户端的socket已断开
if
(flag == -
1
) {
System.out.println(
"有客户断开连接~"
);
this
.removeClient(socket);
break
;
}
// 输出接收到的数据
String read =
new
String(buff);
System.out.println(
"收到数据:"
+ read);
// 给玩家发送数据
String data =
"恭喜你,连接成功啦~~"
;
sendMessage(socket, data);
}
sleep(
10
);
}
catch
(IOException e) {
e.printStackTrace();
}
catch
(InterruptedException e) {
e.printStackTrace();
}
}
}
}
//
|