📄 tksender.cc
字号:
#include <stdlib.h>#include <unistd.h>#include <pthread.h>#include <fstream.h>#include <string>#include <sys/socket.h>#include "coop-agent.h"ofstream out;int pkt_cnt = 1;string getLine(int sock) { string ret; char c; int recv_len; while((recv_len = recv(sock, &c, 1, 0)) == 1) { ret += c; if(c == '\n') break; } return ret;}string getMsg(int sock) { string ret, line; while(1) { line = getLine(sock); ret += line; if(line == "EOL\n") break; } return ret;}void* thread_start(void* arg) { coopAgent* agent = (coopAgent*)arg; agent->start(); return NULL;}int main(int argc, char ** argv) { if (argc != 5) { printf("usage: %s < listen port > < agent id > < port num > < bse host name >\n", argv[0]); exit(0); } pthread_t thread; coopAgent mycoop; struct sockaddr_in my_addr, from_addr; int sock, clnt_sock; unsigned int from_addr_len; out.open("sender.txt", ios::out); if(out.fail()) { cout<<"couldn't open file for writing"<<endl; exit(0); } mycoop.init(atoi(argv[2]),0,atoi(argv[3]), argv[4]); mycoop.add_listening_fd(mycoop.udp_sock, NULL); initTimeout(); pthread_create(&thread, NULL, thread_start, &mycoop); printf("my coop started\n"); if((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) { printf("error creating socket\n"); exit(0); } memset(&my_addr, 0, sizeof(my_addr)); my_addr.sin_family = AF_INET; my_addr.sin_addr.s_addr = htonl(INADDR_ANY); my_addr.sin_port = htons(atoi(argv[1])); if(bind(sock, (struct sockaddr*)&my_addr, sizeof(my_addr)) < 0) { printf("error binding socket\n"); exit(0); } if(listen(sock, 1) < 0) { printf("error listening\n"); exit(0); } from_addr_len = sizeof(from_addr); memset(&from_addr, 0, from_addr_len); printf("waiting for data connection...\n"); if((clnt_sock = accept(sock, (struct sockaddr*)&from_addr, &from_addr_len)) < 0) { printf("error accepting sender\n"); exit(0); } printf("Got data connection\n"); while(1) { string s = getMsg(clnt_sock); mycoop.specific_send_data_pkt(const_cast<char*>(s.c_str()), s.size()); out << pkt_cnt++ << endl; out << flush; } pthread_join(thread, NULL); return 0; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -